Wgrywanie plików WebAPI-bez zapisywania plików na dysk

Cała dokumentacja / tutoriale / pytania dotyczące przetwarzania pliku przesłanego za pomocą FormData do ASP.NET obsługa WebAPI używa MultipartFormDataStreamProvider do przetwarzania strumienia wieloczęściowego w celu podzielenia go na odpowiednie pola formularza i pliki.

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
}

Jednak pliki są automatycznie zapisywane do katalogu podczas procesu.

Wydaje mi się to kłopotliwe, gdy mogłem użyć HttpContext.Current.Request.Files[0].InputStream, aby uzyskać dostęp do danego strumienia plików bezpośrednio w pamięci.

Jak WebAPI może po prostu uzyskać dostęp do strumienia plików bezpośrednio bez narzutu IO użycia MultipartFormDataStreamProvider?

Oficjalny tutorial: http://www.asp.net/web-api/overview/advanced/sending-html-form-data, - część-2

Author: simbolo, 2015-01-15

1 answers

Rozwiązany:

Użyj istniejącego simple MultipartMemoryStreamProvider. Nie są wymagane niestandardowe klasy ani dostawcy. Różni się to od pytania duplicate , które rozwiązało rozwiązanie pisząc niestandardowego dostawcę.

Następnie użyj go w programie obsługi WebAPI w następujący sposób:

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();
    }
}
 81
Author: simbolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 14:27:10