大文件(> 2gb)未写入磁盘

时间:2016-05-31 17:54:57

标签: asp.net-web-api2 iis-8

我有一个接受文件上传的Web API 2项目。上传小文件效果很好,但是当涉及到大文件时,它们根本就不会写入磁盘。在我看来,这发生在大约2 GB的文件。大约1 GB的文件上传得很好。

这些是我的web.config的相关部分:

<system.web>
  <compilation debug="true" targetFramework="4.6.1" /> 
  <httpRuntime targetFramework="4.6.1" maxRequestLength="2147483647"  />
</system.web>

...

<system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="4294967295" />
      </requestFiltering>
    </security>
  </system.webServer>

我从this answer获得了maxAllowedContentLength和maxRequestLength的值。

由于我运行的是IIS 8,我希望能够满足maxAllowedContentLength值。

这是负责处理上传的行动,基于菲利普W的this blog post

    [HttpPost]
    public async Task<HttpResponseMessage> Post()
    {
        //Check if the request contains multipart/form-data.
        if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }

        string uploadPath = @"C:\temp\upload"; // in reality this is retrieved from DB

        try
        {
            var provider = new MultipartFormDataStreamProvider(uploadPath);
            var content = new StreamContent(HttpContext.Current.Request.GetBufferlessInputStream(true));
            foreach (var header in Request.Content.Headers)
            {
                content.Headers.TryAddWithoutValidation(header.Key, header.Value);
            }

            var result = await content.ReadAsMultipartAsync(provider);

            return Request.CreateResponse(HttpStatusCode.Accepted);
        }
        catch(Exception e)
        {
            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
        }

    }

上传小文件有效。我看到它们被写入c:\ temp \ upload。但是大文件没有保存,虽然我看到它们进来(通过观看任务管理器&gt;性能:

20 Mbps upload on the server

有没有人知道为什么我没有看到保存到磁盘的大量请求,而较小的文件会被保存?

0 个答案:

没有答案