asp.net - 将大文件上传到 ASP.NET MVC

标签 asp.net asp.net-mvc upload streaming

对于我正在开发的应用程序,我需要允许用户通过我们的网站上传非常大的文件(即可能有很多千兆字节)。不幸的是,ASP.NET MVC 似乎在开始服务之前将整个请求加载到 RAM 中,这对于此类应用程序来说并不理想。值得注意的是,尝试通过如下代码规避该问题:

if (request.Method == "POST")
{
    request.ContentLength = clientRequest.InputStream.Length;
    var rgbBody = new byte[32768];

    using (var requestStream = request.GetRequestStream())
    {
        int cbRead;
        while ((cbRead = clientRequest.InputStream.Read(rgbBody, 0, rgbBody.Length)) > 0)
        {
            fileStream.Write(rgbBody, 0, cbRead);
        }
    }
}

无法规避将请求缓冲到 RAM 的心态。有没有一种简单的方法可以解决此问题?

最佳答案

事实证明我最初的代码基本是正确的;唯一需要改变的是改变

request.ContentLength = clientRequest.InputStream.Length;

request.ContentLength = clientRequest.ContentLength;

前者在整个请求流中确定内容长度;后者仅检查 Content-Length header ,只要求 header 已完整发送。这使得 IIS 几乎可以立即开始传输请求,从而完全消除了原来的问题。

关于asp.net - 将大文件上传到 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1046230/

相关文章:

sql - ADO.NET 池连接无法重用

asp.net-mvc - HttpResponseException 和 HttpException 之间有什么区别

c# - Asp.Net MVC 中的 DataTable 而不是 Entity 框架

javascript - 使用 FormData 时未获取文件数据

php - 使用 PHP 从远程服务器下载多个图像(大量图像)

asp.net - 在 Microsoft Windows Server 2008 R2 中哪里可以找到 Web 共享?

c# - 预订剧院座位

c# - 检测到 ASP.NET MVC 5 危险的 Request.Path

asp.net-mvc - 我必须在哪一层编码

php - iphone SDK : Upload image from iphone to a php Server send empty file ?(里面有示例代码链接)