У меня есть проект Web API 2, который принимает загрузку файлов. Загрузка небольших файлов работает довольно хорошо, но когда дело доходит до больших файлов, они просто не записываются на диск. Мне кажется, что это происходит с файлами размером где-то около 2 ГБ. Файлы размером около 1 Гб загружаются довольно хорошо.
Это соответствующие части моего 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>
Я получил значения для maxAllowedContentLength и maxRequestLength из этого ответа.
Поскольку я использую IIS 8, я ожидаю, что будет достигнуто значение maxAllowedContentLength.
И это действие, отвечающее за обработку загрузки, основанное на эта запись в блоге Филиппа В.:
[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. Но большие файлы не сохраняются, хотя я вижу, как они приходят (смотря Диспетчер задач > Производительность:
У кого-нибудь есть идея, почему я не вижу большие запросы, сохраненные на диске, в то время как файлы меньшего размера сохраняются?