ASP.NET文件上传控件在上传大文件时超时

3

通过asp.net文件上传控件上传一个相当大的文件(90 MB)后的2分钟左右,出现ERR_CONNECTION_RESET错误。

由于我是在共享主机环境下进行测试,因此不知道有哪些政策会对我施加限制。

我认为web.config设置已经足够:

 <httpRuntime requestValidationMode="2.0" maxRequestLength="1000000" executionTimeout="45000" />

我是否应该考虑其他异步文件上传控件?我是否遗漏了web.config设置?对于慢速连接上的大文件,上传控件是否不够强大?


这个运行在哪个IIS版本上? - Blachshma
根据我的托管控制面板,为IIS 7提供集成模式。 - Hifilover
1
我知道你说的是超时而不是文件大小,但这可能会指引你朝正确的方向前进:http://blog.twinharbor.com/2011/07/28/fixing-iis7-maximum-upload-size/ - Blachshma
1
@Blachshma 实际上谢谢..添加 requestLimits 确实起到了作用!干杯 - Hifilover
1个回答

1

连接重置的原因可能有很多,提高最大请求长度在一定程度上有效,但你关注异步文件上传器是正确的。最重要的部分是使用一个可以将文件“切分”成更小块的异步文件上传器,从而避免请求限制等问题。我个人最好的体验是使用plupload:

http://www.plupload.com/

以下是一些接收文件的代码(这是MVC,但您可以重构为在.NET经典中使用处理程序):

       [HttpPost]            
        public ActionResult UploadImage(int? chunk, int? chunks, string name)
        {
            var fileData = Request.Files[0];

            if (fileData != null && fileData.ContentLength > 0)
            {
                var path = GetTempImagePath(name);
                fileSystem.EnsureDirectoryExistsForFile(path);

                // Create or append the current chunk of file.
                using (var fs = new FileStream(path, chunk == 0 ? FileMode.Create : FileMode.Append))
                {
                    var buffer = new byte[fileData.InputStream.Length];
                    fileData.InputStream.Read(buffer, 0, buffer.Length);
                    fs.Write(buffer, 0, buffer.Length);
                }
            }

            return Content("Chunk uploaded", "text/plain");
        }

感谢提供另一种选择,Richard! - Hifilover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接