【问题标题】:IIS asp.net mvc partial? file uploadIIS asp.net mvc 部分?上传文件
【发布时间】:2010-09-15 23:02:12
【问题描述】:

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

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

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

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

谢谢,

【问题讨论】:

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


    【解决方案1】:

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

    文件在 MIME 中上传 多部分/表单数据格式。经过 默认,所有请求,包括表单 字段和上传的文件,大于 256 KB 缓冲到磁盘,而不是 比保存在服务器内存中。

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 2011-07-08
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多