2015-12-31 10 views
7

コンソールアプリケーションからASP.NET 5 WEB APIサービスに一部のファイルをアップロードしようとしています。ファイルをASP.Net 5 Web APIにアップロードするとき、IFormFileのコレクションが空です。

クライアント(コンソールアプリケーション):

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

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

は残念ながらIFormFileのコレクションは常に空です。 誰でも私にその理由を教えていただけますか?

おかげ

マヌー

+0

問題が解決した場合は、回答を受け入れてください。さもなければ、なぜそれがあなたのために働かないか、答えとしてあなたのために働いたものを提供する(そしてそれを受け入れる)ことについて精緻にすることはあなたにとって素敵でしょう。 –

答えて

1

あなたはmultipart/form-dataにフォームのenctypeを設定する必要があります。このようなもの。

<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

C#HttpRequestMessageを使ってどうやってやっていますか?私がウェブ上で見たすべてのコードサンプルは、私が提供したものと非常に似ています。 MultipartFormDataContentとHttpRequestMessageオブジェクトを使ってハエをアップロードするときに、enctypeへの参照を見つけることができませんでした。 –

7

アップロードコントローラがポストされたデータの名前識別子がfiles、ないfileことを期待しています。

このライン:content.Add(new StreamContent(fs), "file", fn);

は次のようになります。content.Add(new StreamContent(fs), "files", fn);

だからあなたのコードは基本的に動作しますが、それだけで単純なミスでした。

0

私はこの同じ問題に遭遇しましたが、HTMLから<input type="file" name="files" multiple />の名前= "ファイル"が見つかりませんでした。

関連する問題