2017-09-24 36 views
-2

我有一個文件,我使用AJAX提交,但在服務器中,我沒有收到任何東西。.net核心IFormFile不在Web API中工作

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

我不做ajax調用。

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

在我的.net核心,我期待這一點。

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

     return Ok(); 
    } 

這是行不通的。我很擔心我的數據類型是錯誤的。

+0

請顯示發送的數據以及服務器上包含的「文件」。另外,如果不是'AJAX'文章,'axios'是做什麼的? –

+0

查看[示例](https://github.com/mzabriskie/axios/blob/master/examples/upload/index.html)瞭解如何使用axios上傳文件。至少,你需要使用'FormData'。 –

+0

你在客戶端做錯了。看看[這個axios示例如何上傳文件](https://github.com/mzabriskie/axios/blob/master/examples/upload/index.html)。 – poke

回答

1

不幸的是,你的問題是簡要說明,但沒有別的假設一切都已經被你的客戶端和服務的正確配置,

我相信在這裏你的主要問題是,你發送的數據丟失key: 'file'導致file是收到爲null。所以,這必須工作:

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

希望這會有所幫助。

0

我不確定axios如何處理上傳。但通常你需要發送包含該文件的FormData。當使用jQuery AJAX發送此表單數據,您需要確保您設置的processDatacontentType標誌來false

這樣的事會工作

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

}); 

假設你有FileController創建操作方法該文件將該文件保存到您的應用程序根目錄中的某個目錄中。

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