示例#1
0
        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();
            }
        }
示例#2
0
        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);
        }