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);
        }
Beispiel #2
0
        /// <summary>
        /// 上传
        /// </summary>
        public static void Upload()
        {
            ObjectContextCache.Instance["FileUploadProcessed"] = true;

            HttpRequest  request  = HttpContext.Current.Request;
            HttpResponse response = HttpContext.Current.Response;

            string lockID      = WebUtility.GetRequestQueryValue <string>("lockID", string.Empty);
            string userID      = WebUtility.GetRequestQueryValue <string>("userID", string.Empty);
            string fileName    = WebUtility.GetRequestQueryValue <string>("fileName", string.Empty);
            int    fileMaxSize = WebUtility.GetRequestQueryValue <int>("fileMaxSize", 0);
            string controlID   = WebUtility.GetRequestQueryValue("controlID", string.Empty);

            ExceptionHelper.CheckStringIsNullOrEmpty(fileName, "fileName");

            try
            {
                if (fileMaxSize > 0 && request.ContentLength > fileMaxSize)
                {
                    GenerateErrorInformation(string.Format("文件超过了上传大小的限制{0}字节", fileMaxSize));
                }
                else
                {
                    //不检查锁,沈峥修改
                    //CheckLock(lockID, userID);

                    string uploadPath = GetUploadRootPath();

                    AutoCreateUploadPath(uploadPath);

                    Control control = null;

                    if (string.IsNullOrEmpty(controlID) == false)
                    {
                        control = WebControlUtility.FindControlByID((Page)HttpContext.Current.CurrentHandler, controlID, true);
                    }

                    string newID = UuidHelper.NewUuidString();

                    if (fileName.IndexOf(NewMaterialID) == 0)
                    {
                        fileName = fileName.Replace(NewMaterialID, newID);
                    }
                    else
                    {
                        newID = Path.GetFileNameWithoutExtension(fileName);
                    }

                    if (control != null && control is MaterialControl)
                    {
                        UploadEventArgs args = new UploadEventArgs(fileName);
                        ((MaterialControl)control).OnBeforeUploadFile(args);
                    }

                    IMaterialContentPersistManager persistManager = GetMaterialContentPersistManager(newID, new FileInfo(uploadPath + @"Temp\" + fileName));

                    if (request.QueryString["upmethod"] == "new")
                    {
                        var dialogControlID = WebUtility.GetRequestQueryValue("dialogControlID", string.Empty);

                        persistManager.SaveTempMaterialContent(newID, request.Files[0].InputStream);
                        //request.Files[0].SaveAs(uploadPath + @"Temp\" + fileName);

                        string output = "<script type='text/javascript'>";
                        output += "window.parent.$find('" + dialogControlID + "').onUploadFinish(1)";
                        output += "</script>";

                        response.Write(output);
                    }
                    else
                    {
                        //request.SaveAs(uploadPath + @"Temp\" + fileName, false);
                        persistManager.SaveTempMaterialContent(newID, request.InputStream);
                    }

                    if (control != null && control is MaterialControl)
                    {
                        UploadEventArgs args = new UploadEventArgs(fileName);
                        ((MaterialControl)control).OnAfterUploadFile(args);
                    }

                    string fileIconPath = FileConfigHelper.GetFileIconPath(fileName);

                    response.AppendHeader("fileIconPath", HttpUtility.UrlEncode("message=" + fileIconPath));

                    string dateTimeNow = SNTPClient.AdjustedTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
                    response.AppendHeader("lastUploadTag", "message=" + dateTimeNow);
                    response.AppendHeader("newMaterialID", "message=" + HttpUtility.UrlEncode(newID));
                }
            }
            catch (Exception ex)
            {
                string errorMessage = ex.ToString();

                if (ex is ExternalException && ((ExternalException)(ex)).ErrorCode == FileTooLargeError &&
                    ex.Source == "System.Web")
                {
                    errorMessage = "您上传的文件过大";
                }

                GenerateErrorInformation(errorMessage);
            }
            finally
            {
                try
                {
                    response.End();
                }
                catch { }
            }
        }