2012-10-09 51 views
3

我想使用AJAX上傳文件的ASP.Net MVC控制器追趕阿賈克斯文件

我的JavaScript代碼看起來是這樣,基本上用戶更改的輸入值每一次,它會自動上傳文件到控制器

var formdata = false; 
if (window.FormData) { 
    formdata = new FormData(); 
} 

$('input[name=default_export_filename]').change(function() { 
    var i = 0, len = this.files.length, img, reader, file; 

    for (; i < len; i++) { 
     file = this.files[i]; 
     if (file.type.match(/spreadsheet/) || file.type.match(/ms-excel/)) { 
      if (window.FileReader) { 
       reader = new FileReader(); 
       reader.onloadend = function (e) { 
        //showUploadedItem(e.target.result, file.fileName); 
       }; 
       reader.readAsDataURL(file); 
      } 
      if (formdata) { 
       formdata.append("default_export_filename", file); 
      } 
     } 
    } 

    if (formdata) { 
     $.ajax({ 
      url: root + mod + '/uploaddef', 
      type: "POST", 
      data: formdata, 
      processData: false, 
      contentType: false, 
      success: function (res) { 
       console.log(res); 
      } 
     }); 
    } 
}); 

在控制器端,我無法使用趕上這個文件

[HttpPost] 
    public ActionResult UploadDEF(HttpPostedFileBase file) 
    { 
     var jsonData = new 
     { 
      response = 3 
     }; 

     return Json(jsonData); ; 
    } 

還是這個

[HttpPost] 
    public ActionResult UploadDEF(FormCollectionfile) 
    { 
     var jsonData = new 
     { 
      response = 3 
     }; 

     return Json(jsonData); ; 
    } 

file參數始終爲空。但在firebug中,我可以看到瀏覽器正在將文件發佈到服務器。我應該用什麼對象來捕捉文件?

我意識到舊版瀏覽器不支持FormData對象,但我的客戶端都使用最新的瀏覽器。所以這不是問題。

+0

看到這個帖子:http://stackoverflow.com/questions/2428296/jquery-ajax-upload-file-in-asp-net-mvc –

回答

3

問題解決了。

事實證明,我不必給控制器的方法提供任何參數。這些文件可通過請求對象獲得。

感謝所有

1

你不能使用ajax POST上傳這樣的文件,必須是表單提交。

看看像AjaxUploadify或類似的組件。

+0

它與PHP HTTP工作://網.tutsplus.com/tutorials/javascript-ajax/uploadloading-files-with-ajax/ –

+0

爲什麼不能使用ASP.Net MVC? –

+0

@strike_noir顯然由於安全原因受到限制。 ajax不允許multipart/form-data enctype。有幾個解決方案,大多數使用iframe,解決此問題 – dove