IIS asp.net mvc偏?上传文件

时间:2010-09-15 23:02:12

标签: asp.net asp.net-mvc iis

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

[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);
}

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

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

谢谢,

1 个答案:

答案 0 :(得分:5)

在调用操作方法之前,需要将while文件发送到服务器。引自documentation

  

文件以MIME格式上传   multipart / form-data格式。通过   默认,所有请求,包括表单   字段和上传的文件,大于   相反,256 KB被缓冲到磁盘   而不是保存在服务器内存中。

     

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

     

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

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