2015-09-30 72 views
1

我正在使用ASP.NET MVC 5,jquery最新版本。 我正尝试使用jquery fileupload上传多个文件,但我无法接收多个文件。无法上传多个文件

查看:

<input id="fileupload" type="file" multiple="multiple" name="files[]" > 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#fileupload').fileupload({ 
      dataType: 'json', 
      url: '/Media/UploadFiles', 
      autoUpload: true, 
      done: function (e, data) { 

      } 
     }).on('fileuploadprogressall', function (e, data) { 
      var progress = parseInt(data.loaded/data.total * 100, 10); 
      $('.progress .progress-bar').css('width', progress + '%'); 
     }); 
    }); 
</script> 

控制器:

[HttpPost] 
     public ContentResult UploadFiles() 
     { 

      foreach (string file in Request.Files) 
      { } 
     } 

在这里,在Request.Files我recieving只有一个文件。

+0

你可以尝试上传没有jQuery插件?我认为你的插件是一个接一个地上传它们的。 – sed

回答

2

您上传的文件实际上是一个接一个发送的。

您可以更改服务代码

[HttpPost] 
public JsonResult UploadFiles() 
{ 
    IList<string> filesSaved = new List<string>(); 

    foreach (string file in Request.Files) 
    { 
    HttpPostedFileBase hpf = Request.Files[file]; 
    if (hpf.ContentLength > 0) 
    { 
     var fileName = hpf.FileName; 
     filesSaved.Add(fileName); 
    } 
    } 

    return Json(new {files = filesSaved}, JsonRequestBehavior.DenyGet); 
} 

,并插入一个断点,你会看到,请求经过一次为每个文件要发送。

问题出在您的客户端代码中。该插件singleFileUploads中有一个选项,默认为true,因为您可以阅读here

你可以改变你的客户端代码中设置singleFileUploads: false

$(document).ready(function() { 
     $('#fileupload').fileupload({ 
      dataType: 'json', 
      url: '/Media/UploadFiles', 
      autoUpload: true, 
      singleFileUploads: false, 
      done: function (e, data) { 

      } 
     }).on('fileuploadprogressall', function (e, data) { 
      var progress = parseInt(data.loaded/data.total * 100, 10); 
      $('.progress .progress-bar').css('width', progress + '%'); 
     }); 
}); 

,并如预期正常工作了。

+0

非常感谢,作品像魅力..!但你认为这种方法是上传各种类型媒体(包括图片,视频,音频等)的最佳选择。同时还有很多很棒的插件可用,它们具有所有功能,但我无法使用它们,因为我的需求更多一点定制。 – Dragon

+1

这种方法没有任何问题。您可以检查您在服务器上上传的媒体类型。在web.config中,你可以设置最大尺寸等等。这些天我使用[dropzone.js](http://www.dropzonejs.com/),这是更容易和更好的配置。 – LeftyX