public static void ProcessFileUpload(this HttpRequestMessage request, Func <ProcessFileArguments, bool> processor) { HttpContext.Current.Response.Buffer = false; HttpContext.Current.Response.Expires = -1; HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); HttpContext.Current.Response.Write(new string(' ', 4096)); HttpContext.Current.Response.Flush(); ProcessProgress.Current.RegisterResponser(ScriptProgressResponser.Instance); ProcessFileResult result = new ProcessFileResult(); try { ProcessProgress.Current.MinStep = 0; ProcessProgress.Current.CurrentStep = 0; ProcessProgress.Current.MaxStep = 100; request.Content.IsMimeMultipartContent("form-data").FalseThrow("上传请求的格式不正确"); InMemoryMultipartFormDataStreamProvider provider = InMemoryMultipartFormDataStreamProvider.GetProvider(request); bool needContinue = true; foreach (StreamContent fileContent in provider.Files) { ProcessFileArguments args = new ProcessFileArguments() { FormData = provider.FormData, UploadedStream = fileContent.ReadAsStreamAsync().Result, ProcessResult = result }; if (processor != null) { needContinue = processor(args); } if (needContinue == false) { break; } } } catch (System.Exception ex) { result.Error = ex.Message; } finally { ScriptProgressResponser.Instance.ResponseResult("processComplete", result); HttpContext.Current.Response.End(); } }
public static MaterialModelCollection ProcessMaterialUpload(this HttpRequestMessage request) { MaterialModelCollection materials = new MaterialModelCollection(); request.Content.IsMimeMultipartContent("form-data").FalseThrow("上传请求的格式不正确"); InMemoryMultipartFormDataStreamProvider provider = InMemoryMultipartFormDataStreamProvider.GetProvider(request); string mumJson = provider.FormData.GetValue("materialUploadModel", string.Empty); MaterialUploadModel uploadModel = null; if (mumJson.IsNotEmpty()) { JsonSerializerSettings settings = new JsonSerializerSettings(); settings.ContractResolver = new CamelCasePropertyNamesContractResolver(); uploadModel = JsonConvert.DeserializeObject <MaterialUploadModel>(mumJson); } else { uploadModel = new MaterialUploadModel(); } foreach (StreamContent fileContent in provider.Files) { if (uploadModel.OriginalName.IsNullOrEmpty()) { ContentDispositionHeaderValue contentDisposition = fileContent.Headers.ContentDisposition; if (contentDisposition != null) { string fileName = contentDisposition.FileName.Replace("\"", string.Empty); uploadModel.OriginalName = Path.GetFileName(fileName); } } MaterialModel material = uploadModel.GenerateMaterial(); IMaterialContentPersistManager persistManager = GetMaterialContentPersistManager(material.ID, GetTempUploadFilePath(material.ID, uploadModel.RootPathName, uploadModel.OriginalName)); persistManager.SaveTempMaterialContent(material.ID, fileContent.ReadAsStreamAsync().Result); materials.Add(material); } return(materials); }