2015-12-31 18 views
7

Tôi đang cố gắng tải lên một số tệp từ ứng dụng bảng điều khiển lên dịch vụ API ASP.NET 5 WEB.Khi tải tệp lên Web API ASP.Net 5, tập hợp IFormFile trống

Khách hàng (giao diện điều khiển ứng dụng):

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

Thật không may là bộ sưu tập các IFormFile luôn trống. Bất cứ ai cũng có thể cho tôi biết lý do tại sao?

Cảm ơn

Manu

+0

Vui lòng chấp nhận câu trả lời nếu nó giải quyết được sự cố của bạn. Nếu không nó sẽ là tốt đẹp của bạn để xây dựng trên lý do tại sao nó không làm việc cho bạn hoặc cung cấp những gì đã làm việc cho bạn như là một câu trả lời (và chấp nhận điều đó). –

Trả lời

1

Bạn cần phải đặt enctype của form là multipart/form-data. Một cái gì đó như thế này.

<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

Làm thế nào để bạn làm điều đó với một C# HttpRequestMessage? Tất cả các mẫu mã tôi đã thấy trên web rất giống với mẫu tôi đã cung cấp. Tôi không thể tìm thấy một tham chiếu đến enctype khi tải lên ruồi với một đối tượng MultipartFormDataContent và HttpRequestMessage. –

7

điều khiển tải lên của bạn hy vọng nhận dạng tên của dữ liệu được đưa lên được files, không file.

dòng này: content.Add(new StreamContent(fs), "file", fn);

nên là: content.Add(new StreamContent(fs), "files", fn);

Vì vậy, mã của bạn về cơ bản hoạt động, nó chỉ là một sai lầm đơn giản.

0

Tôi đã gặp phải sự cố giống hệt này và hóa ra là tôi đã bỏ lỡ - name = "files" từ <input type="file" name="files" multiple /> từ HTML.

Các vấn đề liên quan