web-dev-qa-db-fra.com

Téléchargement de fichier WebAPI - Sans écrire des fichiers sur le disque

Toute la documentation/didacticiels/questions sur le traitement d'un fichier téléchargé à l'aide de FormData vers un gestionnaire WebAPI ASP.NET utilise MultipartFormDataStreamProvider pour traiter le flux en plusieurs parties afin de le scinder en champs et fichiers 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 lors du traitement.

Cela me semble très compliqué d’utiliser HttpContext.Current.Request.Files[0].InputStream pour accéder à un flux de fichiers donné directement en mémoire.

Comment WebAPI peut-il simplement accéder directement au flux de fichiers sans IO surcharge liée à l'utilisation de MultipartFormDataStreamProvider?

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

44
simbolo

Résolu:

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

Puis utilisez-le dans un gestionnaire WebAPI comme suit:

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