IIS asp.net mvc偏?上传文件

and*_*eer 3 asp.net iis asp.net-mvc

鉴于以下代码非常通用,我希望有人可以告诉我一些幕后发生的事情......

[HttpPost]
public ActionResult Load(Guid regionID, HttpPostedFileBase file)
{
    if (file.ContentLength == 0)
        RedirectToAction("blablabla.....");

    var fileBytes = new byte[file.ContentLength];
    file.InputStream.Read(fileBytes, 0, file.ContentLength);
}
Run Code Online (Sandbox Code Playgroud)

具体来说,在调用action方法之前,文件是否已完全上传到服务器?或者是file.InputStream.Read()方法调用导致或者更确切地说等待整个文件上载.我可以对流进行部分读取,并在上传时访问文件的"块"吗?(如果在我的方法被调用之前上传了整个火,那么这都是一个没有实际意义的点.)

任何人都可以向我指出一些关于内部运作的好信息.IIS6或II7之间有什么区别吗?

谢谢,

Dar*_*rov 5

在调用操作方法之前,需要将while文件发送到服务器.从文档中引用:

文件以MIME multipart/form-data格式上传.默认情况下,大于256 KB的所有请求(包括表单字段和上载文件)都缓冲到磁盘,而不是保存在服务器内存中.

您可以通过访问MaxRequestLength属性或通过设置Machine.config或Web.config文件中的httpRuntime元素(ASP.NET设置架构)元素的maxRequestLength属性来指定允许的最大请求大小.默认值为4 MB.

可以通过访问RequestLengthDiskThreshold属性或通过设置Machine.config中的httpRuntime元素(ASP.NET设置架构)元素的requestLengthDiskThreshold属性来指定在服务器内存中为请求缓冲的数据量(包括文件上载).或Web.config文件.

服务器内存不会在服务器上使用,但文件内容将缓冲到磁盘.一旦客户端发送了整个文件,ASP.NET管道将调用您的控制器操作,您可以以块的形式读取请求流并将其保存到另一个文件,该文件将是上载文件的最终位置.在文件上传完成之前无法调用该操作,因为文件multipart/form-data后面可能还有其他字段,在这种情况下不会分配它们.