Подтвердить что ты не робот

Загрузка файла 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

4b9b3361

Ответ 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();
    }
}