接口中需要对上传的文件进行大小的限制
原上传如下
1 #region 方法1.自动保存.使用中 2 //可以用这个返回之后的键值对-此处有返回类故废弃不用 3 //Dictionary<string, string> dic = new Dictionary<string, string>(); 4 //指定要将文件存入的服务器物理位置 5 string root = HttpContext.Current.Server.MapPath("~/App_Data"); 6 var provider = new MultipartFormDataStreamProvider(root); 7 8 // Read the form data. 9 // 读取表单数据 10 await Request.Content.ReadAsMultipartAsync(provider); 11 12 if (Checker.IsNotEmpty(provider.FileData)) 13 { 14 fResult.errCode = ResultConst.UPLOAD_SUCCESS_CODE; 15 16 // This illustrates how to get the file names. 17 // 以下描述如何获取文件名 18 foreach (MultipartFileData file in provider.FileData) 19 { 20 //接收文件-自动保存 21 //获取上传文件实际的文件名 22 Trace.WriteLine(file.Headers.ContentDisposition.FileName); 23 //获取上传文件在服务上默认的文件名 24 Trace.WriteLine("Server file path: " + file.LocalFileName); 25 26 //重命名文件名 27 string newFileName = file.Headers.ContentDisposition.FileName; 28 newFileName = newFileName.Trim('"'); 29 newFileName = newFileName.Split('\\')[newFileName.Split('\\').Length - 1]; 30 newFileName = DateTime.Now.ToString("yyyyMMddHHss") + newFileName; 31 string newFilePathName = root + "\\" + newFileName; 32 33 //文件重命名-删除自动生成的文件-File.Delete(file.LocalFileName); 34 Directory.Move(file.LocalFileName, newFilePathName); 35 36 //设置文件名 37 fResult.SetMatsterDataFileName(newFileName); 38 39 //TODO 外部接口调用,返回url 40 fResult.SetMatsterDataSmallIconUrl("example"); 41 } 42 } 43 else 44 { 45 fResult.errCode = ResultConst.UPLOAD_FAILURE_CODE; 46 fResult.status = ResultConst.UPLOAD_FAILURE_STATUS; 47 fResult.message = "无文件信息!"; 48 } 49 50 //// 显示所有“键-值”对 51 //foreach (var key in provider.FormData.AllKeys) 52 //{ 53 // //接收FormData 54 // //dic.Add(key, provider.FormData[key]); 55 //} 56 #endregion
中间插入长度判断,限制大小5M
1 if (new System.IO.FileInfo(file.LocalFileName).Length > (5 * 1024 * 1024)) 2 { 3 //文件大小超过5M 4 fResult.errCode = ResultConst.UPLOAD_FAILURE_CODE; 5 fResult.status = ResultConst.UPLOAD_FAILURE_STATUS; 6 fResult.message = "文件大小超过5M!"; 7 8 //删除自动生成的文件 9 File.Delete(file.LocalFileName); 10 11 //直接返回 12 return Json(fResult); 13 }
但是,在接口中添加,实际使用时会报错,大概是读取时溢出了。
需要在Web.config中添加限制长度的代码,上述才可以正常使用。
Web.config中需要添加两部分内容,添加内容如下
1 <system.web> 2 <compilation debug="true" targetFramework="4.5" /> 3 <!--<httpRuntime targetFramework="4.5" />--> 4 <httpRuntime targetFramework="4.5" maxRequestLength="1073741824" /> 5 </system.web> 6 7 <system.webServer> 8 <security> 9 <requestFiltering> 10 <!--最大允许请求长度,单位byte,当前限制为1G--> 11 <requestLimits maxAllowedContentLength="1073741824"></requestLimits> 12 </requestFiltering> 13 </security> 14 </system.webServer>
这两部分添加完成后,可以正常使用程序中的大小限制了。
可能还有别的方法限制,时间关系没有进行更多调查。