jQuery将带有ajax的文件发送到MVC Controller

Sam*_*Sam 1 javascript ajax asp.net-mvc jquery

我正在尝试使用jQuery将文件发送到我的MVC控制器,但该操作仍然接收一个空的HttpPostedFileBase参数.

HTML:

<input type="file" name="file" id="file" />
<input type="submit" name="submit" id="upload" value="Submit"/>
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$(function () {
    $('#upload').click(function () {

        var data = new FormData($('#file')[0].files[0]);

        $.ajax({
            url: '@Url.Action("Upload", "Home")',
            type: 'POST',
            data: data,
            cache: false,
            contentType: false,
            processData: false
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

控制器:

[HttpPost]
public virtual ActionResult Upload(HttpPostedFileBase file)
{
    // file = null
}
Run Code Online (Sandbox Code Playgroud)

new FormData($('#file')[0] .files [0]):

__proto__: FormData
Run Code Online (Sandbox Code Playgroud)

$( '#文件')[0​​] .files [0]:

lastModified: 1445429215528
lastModifiedDate: Wed Oct 21 2015 14:06:55 GMT+0200 (Central Europe Daylight Time)
name: "Google_Chrome_logo_2011.jpg"
size: 5506
type: "image/jpg"
webkitRelativePath: ""
__proto__: File
Run Code Online (Sandbox Code Playgroud)

我几乎复制了我在互联网上找到的其他例子的代码,但不知怎的,它只是不起作用.

小智 8

试试这个:

if (Request.Files.Count > 0)
{
   foreach (string file in Request.Files)
   {
      var _file = Request.Files[file];
   }
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

var $file = document.getElementById('file'),
    $formData = new FormData();

if ($file.files.length > 0) {
   for (var i = 0; i < $file.files.length; i++) {
      $formData.append('file-' + i, $file.files[i]);
   }
}

$.ajax({
   url: '/home/upload',
   type: 'POST',
   data: $formData,
   dataType: 'json',
   contentType: false,
   processData: false,
   success: function ($data) {

   }
 });
Run Code Online (Sandbox Code Playgroud)