对于我正在开发的一个应用程序,我需要允许用户通过我们的网站上传非常大的文件--也就是潜在的几十亿字节。不幸的是,RAM似乎在开始服务之前就将整个请求加载到ASP.NET中--对于这样的应用程序来说并不是很理想。值得注意的是,尝试通过如下代码来规避此问题:
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中的心态。有没有一种简单的方法来解决这个问题?
发布于 2009-08-10 21:36:54
事实证明,我的初始代码基本上是正确的;唯一需要更改的就是更改
request.ContentLength = clientRequest.InputStream.Length;
至
request.ContentLength = clientRequest.ContentLength;
前者在整个请求中传输以确定内容长度;后者只检查Content-Length
报头,这只要求报头已经完整发送。这允许IIS几乎立即开始流式处理请求,从而完全消除了原始问题。
https://stackoverflow.com/questions/1046230
复制相似问题