2015-09-30 68 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