2015-12-31 17 views
7

Bazı dosyaları bir konsol uygulamasından bir ASP.NET 5 WEB API hizmetine yüklemeye çalışıyorum.Dosyaları ASP.Net 5 Web API'sına yüklerken, IFormFile koleksiyonu boş

İstemci (konsol uygulaması):

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

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

Maalesef IFormFile toplanması her zaman boştur. Herkes bana nedenini söyleyebilir?

Teşekkür

Manu

+0

Lütfen sorununuzu çözdüyse bir cevabı kabul edin. Aksi halde, sizin için neden çalışmadığını ya da sizin için neyin işe yaradığını size bildirmek (ve bunu kabul etmek) sizin için iyi olacaktır. –

cevap

1

Sen/form verilerini multipart formun enctype ayarlamanız gerekir. Böyle bir şey.

<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

Bunu bir C# HttpRequestMessage ile nasıl yaparsınız? Web'de gördüğüm tüm kod örnekleri sağladığımla çok benzer. MultipartFormDataContent ve HttpRequestMessage nesnelerle sinek yüklerken, modele bir başvuru bulamadım. –

7

Yüklemeniz kontrolör yayınlanan verilerin adı tanımlayıcı files değil file olmasını bekler.

Bu hat: content.Add(new StreamContent(fs), "file", fn);

olmalıdır:

Yani kod temelde çalışır content.Add(new StreamContent(fs), "files", fn);, sadece basit bir hataydı.

0

Bu özdeş sayıya rastladım ve yalnızca eksik olduğunu belirttim - HTML'den <input type="file" name="files" multiple /> adlı addan "dosya".