C#/.NET-WebApi 文件大小 踩坑指南

接口中需要对上传的文件进行大小的限制

原上传如下

 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>

这两部分添加完成后,可以正常使用程序中的大小限制了。

 

可能还有别的方法限制,时间关系没有进行更多调查。

 

上一篇:AcWing 741. 斐波那契数列


下一篇:《Codeforces Round #741 (Div. 2)》