VS2019开发调试下上传文件大小限制调整

最近,在做微信小程序方面的开发工作,其中涉及到了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目录下的

VS2019开发调试下上传文件大小限制调整

修改applicationhost.config 这个文件,找到 system.webServer/security/requestFiltering 节点,添加 

<requestLimits maxAllowedContentLength="524288000" />
这一行,设置请求内容长度为500MB
然后修改项目的web.config 文件,在system.web 节点下添加 <httpRuntime maxRequestLength="524288000" /> 这一行,保持和上面一步设置的长度一致即可,可能已经存在这个httpRuntime的配置,比如net版本号的设置,那么在后面追加 maxRequestLength="524288000" 就可以了,详见下图设置 VS2019开发调试下上传文件大小限制调整
针对IIS Express 的文件上传限制按照上述改动就可以了,下面介绍下关于IIS Express 端口号设置的方法
同样还是打开那个配置文件,找到
system.applicationHost/sites/site[name=xxxx]/bindings  这个节点

VS2019开发调试下上传文件大小限制调整

找到你对应的项目和站点,修改里面的端口号,然后以管理员身份运行 cmd 命令提示符,执行如下命令


netsh http add urlacl url="http://*:64179:*" user=everyone
netsh http add urlacl url="https://*:4433:*" user=everyone
以后调试运行的时候,IIS Express 的端口号就固定下来了


欢迎分享,(联系QQ/微信:1379998143)

评论