最近,在做微信小程序方面的开发工作,其中涉及到了webapi 文件上传的问题,于是自己就写了个测试程序,其中前端关键代码如下
$("#upload").click(function () { var formData = new FormData(); var file = document.getElementById("file").files[0]; formData.append("fileInfo", file); $.ajax({ url: "/api/FileManager/UploadFile", type: "POST", data: formData, contentType: false,//必须false才会自动加上正确的Content-Type processData: false,//必须false才会避开jQuery对 formdata 的默认处理,XMLHttpRequest会对 formdata 进行正确的处理 success: function (data) { alert(data); }, error: function (data) { alert("上传失败!"); } }); });
后台WebAPI 代码如下
[HttpPost] public IHttpActionResult UploadFile() { try { var httpRequest = HttpContext.Current.Request; HttpPostStreamHelper helper = new HttpPostStreamHelper(); helper.GetUploadFile(httpRequest); return Ok<ResultModel>(new ResultModel() { Status=true,ErrorCode="0",ErrorMsg="",Data=null }); } catch (Exception ex) { return Ok<ResultModel>(new ResultModel() { Status = false, ErrorCode ="-1", ErrorMsg = ex.Message, Data = null }); } }
public void GetUploadFile(HttpRequest request) { try { var files = request.Files; //var formdate = request.Form; string path = AppDomain.CurrentDomain.BaseDirectory + $"Files\\{DateTime.Now.ToString("yyyyMMdd")}"; //foreach (var item in files.AllKeys) //{ HttpPostedFile fileD = files[0]; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string extname = fileD.FileName.Substring(fileD.FileName.LastIndexOf('.')); string filename = DateTime.Now.ToString("yyyyMMddHHmms") + extname; fileD.SaveAs(path + filename); //} } catch (Exception ex) { throw ex; } }然后在测试的过程中,发现上传一些几百KB的文件毫无问题,在上传一个5MB大小的PDF文件时报错,提示超出了上传大小限制,网上找了很多种方法,都是针对IIS本身设置的,后来发现了针对IIS Express 的调整方法
找到该项目对应.vs文件夹下面的config目录下的
修改applicationhost.config 这个文件,找到 system.webServer/security/requestFiltering 节点,添加
<requestLimits maxAllowedContentLength="524288000" />
这一行,设置请求内容长度为500MB
然后修改项目的web.config 文件,在system.web 节点下添加 <httpRuntime maxRequestLength="524288000" /> 这一行,保持和上面一步设置的长度一致即可,可能已经存在这个httpRuntime的配置,比如net版本号的设置,那么在后面追加 maxRequestLength="524288000" 就可以了,详见下图设置 
针对IIS Express 的文件上传限制按照上述改动就可以了,下面介绍下关于IIS Express 端口号设置的方法
同样还是打开那个配置文件,找到
system.applicationHost/sites/site[name=xxxx]/bindings 这个节点
找到你对应的项目和站点,修改里面的端口号,然后以管理员身份运行 cmd 命令提示符,执行如下命令
netsh http add urlacl url="http://*:64179:*" user=everyone
netsh http add urlacl url="https://*:4433:*" user=everyone以后调试运行的时候,IIS Express 的端口号就固定下来了
欢迎分享,(联系QQ/微信:1379998143)