Téléchargement de fichier WebAPI – Sans écriture de fichiers sur le disque

Toutes les documentations / didacticiels / questions sur le traitement d’un fichier téléchargé à l’aide de FormData vers un gestionnaire ASP.NET WebAPI utilisent MultipartFormDataStreamProvider pour traiter le stream en plusieurs parties afin de le fractionner en fichiers et champs de formulaire appropriés.

 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 } 

Cependant, les fichiers sont automatiquement écrits dans un répertoire pendant le traitement.

Cela me semble compliqué quand je peux utiliser HttpContext.Current.Request.Files[0].InputStream pour accéder directement à un stream de fichiers donné en mémoire.

Comment WebAPI peut-il accéder au stream de fichiers directement sans la surcharge d’E / S de l’utilisation de MultipartFormDataStreamProvider ?

Tutoriel officiel: http://www.asp.net/web-api/overview/advanced/sending-html-form-data,-part-2

Résolu:

Utilisez le simple MultipartMemoryStreamProvider existant. Aucune classe ou fournisseur personnalisé requirejs. Cela diffère de la question en double qui a résolu la solution en écrivant un fournisseur personnalisé.

Ensuite, utilisez-le dans un gestionnaire WebAPI comme suit:

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