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
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();
}
}
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