2017-09-24 37 views
-2

私はajaxを使用して送信しているファイルを持っていますが、サーバーには何も受信しません。.Net Core IFormFileがWeb APIで動作しない

let file = document.getElementById('file').files[0]; 

私はajax呼び出しを行いません。

axios.post('http://localhost:5000/File/Create', file) 

私の.Net Coreでは、これを期待しています。

[HttpPost] 
    public IActionResult Create([FromBody] IFormFile file) 
    { 

     return Ok(); 
    } 

これは機能しません。私は私のデータ型では間違っているworderingです。

+0

送信されたデータと、ファイルに含まれるものをサーバーに表示してください。また、 'AJAX'の投稿ではなく、' axios'はどうしますか? –

+0

Axiosを使用してファイルをアップロードする方法については、[example](https://github.com/mzabriskie/axios/blob/master/examples/upload/index.html)を参照してください。最低でも、あなたは 'FormData'で作業する必要があります。 –

+0

あなたはクライアント側で間違っています。ファイルをアップロードする方法については、このAxiosの例をご覧ください(https://github.com/mzabriskie/axios/blob/master/examples/upload/index.html)。 – poke

答えて

1

nullとして受け取りました。したがって、これはうまくいかなければなりません:

axios.post 
(
    'http://localhost:5000/File/Create', 
    { 
    file: file 
    } 
) 

希望します。

0

どのようにaxiosアップロードを処理するか分かりません。しかし、一般的にはファイルを持つFormDataを送る必要があります。このフォームデータを送信するためにjQueryのAJAXを使用している場合、あなたはfalse

processDatacontentTypeフラグを設定することを確認する必要があり、このような何かはあなたがFileControllerのCreateアクションメソッドを持っていると仮定すると

$("#saveBtn").click(function(e) { 
    e.preventDefault(); 

    var fdata = new FormData(); 

    var fileInput = $('#logo')[0]; 
    var file = fileInput.files[0]; 
    fdata.append("logo", file); 

    $.ajax({ 
     type: 'post', 
     url: "@Url.Action("Create", "File")", 
     data: fdata, 
     processData: false, 
     contentType: false 
    }).done(function(result) { 
     // do something with the result now 
     console.log(result); 
    }); 

}); 

を働くだろうこれはファイルを取得し、それをあなたのアプリのルートのいくつかのディレクトリに保存します。残念ながら、あなたの問題は、私はここにあなたの主な問題は、あなたの送信されたデータはfileビーイングになりkey: 'file'が欠けていることであると信じて簡単に説明したが、他のすべては、あなたのクライアントとサービス上で適切に設定されていると仮定すると、

public class FileController : Controller 
{ 
    private readonly IHostingEnvironment hostingEnvironment; 
    public FileController(IHostingEnvironment environment) 
    { 
     hostingEnvironment = environment; 
    } 
    [HttpPost] 
    public IActionResult SaveFile(IFormFile logo) 
    { 
     if (logo != null) 
     { 
      //simply saving to "uploads" directory 
      var uploads = Path.Combine(hostingEnvironment.WebRootPath, "uploads"); 
      var filePath = Path.Combine(uploads, logo.FileName); 
      logo.CopyTo(new FileStream(filePath, FileMode.Create)); 
      return Json(new { status = "success" });    
     } 
     return Json(new { status = "error" }); 
    } 
} 
関連する問題