2015-12-31 17 views
7

Sto tentando di caricare alcuni file da un'applicazione console in un servizio API Web ASP.NET 5.Durante il caricamento di file su API Web ASP.Net 5, la raccolta di IFormFile è vuota

client (console app):

private static HttpResponseMessage UploadFiles(string[] files, Uri uploadEndpoint) 
    { 
     var message = new HttpRequestMessage(); 
     var content = new MultipartFormDataContent(); 

     foreach (var file in files) 
     { 
      var fs = new FileStream(file, FileMode.Open); 
      var index = file.LastIndexOf(@"\"); 
      var fn = file.Substring(index + 1); 
      fs.Position = 0; 
      content.Add(new StreamContent(fs), "file", fn); 
     } 

     message.Method = HttpMethod.Post; 
     message.Content = content; 
     message.RequestUri = uploadEndpoint; 

     var client = new HttpClient(); 
     return client.SendAsync(message).Result; 
    } 

Server (Asp.Net 5) Web API

[HttpPost("upload")] 
    public IActionResult UploadFiles(ICollection<IFormFile> files) 
    { 
     var streams = files.Select(f => f.OpenReadStream()).ToArray(); 
     var names = files.Select(f => ContentDispositionHeaderValue.Parse(f.ContentDisposition).FileName).ToArray(); 

     ProcessFiles(streams, names); 

     return new HttpOkResult(); 
    }  

Purtroppo la raccolta di IFormFile è sempre vuoto. Chiunque può dirmi perché?

Grazie

Manu

+0

Si prega di accettare una risposta se ha risolto il tuo problema. Altrimenti sarebbe bello da parte tua spiegare perché non funziona per te o fornire ciò che ha funzionato per te come risposta (e accettarlo). –

risposta

1

È necessario impostare l'enctype del modulo form-data multipart /. Qualcosa come questo.

<form method="post" asp-action="Index" asp-controller="Home" enctype="multipart/form-data"> 
    <input type="file" name="files" multiple/> 
    <input type="submit" value="Upload" /> 
</form> 
+0

Come si fa con C# HttpRequestMessage? Tutti gli esempi di codice che ho visto sul web sono molto simili a quello che ho fornito. Non sono riuscito a trovare un riferimento a enctype durante il caricamento di mosche con oggetti MultipartFormDataContent e HttpRequestMessage. –

7

Il controller di upload si aspetta che l'identificativo nome dei dati inviati ad essere files, non file.

Questa linea: content.Add(new StreamContent(fs), "file", fn);

dovrebbe essere: content.Add(new StreamContent(fs), "files", fn);

Così il vostro codice funziona in fondo, era solo un semplice errore.

0

Mi sono imbattuto in questo problema identico e si è scoperto che mi mancava solo - name = "file" da <input type="file" name="files" multiple /> da HTML.

Problemi correlati