Загрузка файла WebAPI - без записи файлов на диск
Всю документацию/учебники/вопросы о обработке файла, загруженного с помощью FormData, в обработчик ASP.NET WebAPI, используйте MultipartFormDataStreamProvider
для обработки многостраничного потока, чтобы разбить его на соответствующие поля и файлы формы.
var root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
await Request.Content.ReadAsMultipartAsync(provider);
foreach (MultipartFileData file in provider.FileData)
{
// File
}
Однако файлы автоматически записываются в каталог во время процесса.
Кажется, много хлопот, когда я мог просто использовать HttpContext.Current.Request.Files[0].InputStream
для доступа к данному файловому потоку непосредственно в памяти.
Как WebAPI может напрямую обращаться к файловому потоку без накладных расходов IO при использовании MultipartFormDataStreamProvider
?
Официальный учебник: http://www.asp.net/web-api/overview/advanced/sending-html-form-data,-part-2
Ответы
Ответ 1
Решено:
Используйте существующий простой MultipartMemoryStreamProvider
. Никаких пользовательских классов или поставщиков не требуется. Это отличается от повторяющегося вопроса, который решил решение, написав пользовательский поставщик.
Затем используйте его в обработчике WebAPI так:
public async Task<IHttpActionResult> UploadFile()
{
if (!Request.Content.IsMimeMultipartContent())
{
return StatusCode(HttpStatusCode.UnsupportedMediaType);
}
var filesReadToProvider = await Request.Content.ReadAsMultipartAsync();
foreach (var stream in filesReadToProvider.Contents)
{
var fileBytes = await stream.ReadAsByteArrayAsync();
}
}