我一直在網上搜索尋找答案,這個問題,但我似乎無法找到任何工作,我有以下的控制器代碼:MVC jQuery的文件上傳Request.Files總是空
[HttpPost]
public ActionResult UploadFiles()
{
// If files exist
if (Request.Files != null && Request.Files.Count > 0)
{
// ** Do stuff
return Json(new { result = true, responseText = "File(s) uploaded successfully" });
}
// Return no files selected
return Json(new { result = false, responseText = "No files selected" });
}
而且下面我CSHTML頁面代碼的正常工作和控制器可以看到我上傳的文件:
<input type="file" name="files" id="files" accept="image/*;capture=camera" multiple>
<button type="button" onclick="submitform()">Submit</button>
<script>
function submitform(){
// Get files from upload
var files = $("#files").get(0).files;
// Create form data object
var fileData = new FormData();
// Loop over all files and add it to FormData object
for (var i = 0; i < files.length; i++) {
fileData.append(files[i].name, files[i]);
}
// Send files to controller
var xhr = new XMLHttpRequest();
xhr.open("POST", "/Quotes/QuoteFiles/UploadFiles", false);
xhr.send(fileData);
}
</script>
然而,當我嘗試改變這種使用Ajax調用工作,因爲在控制器圖所示,然後Request.Files始終沒有文件。我已經改變了只位的是「發送文件到控制器」部分:
<input type="file" name="files" id="files" accept="image/*;capture=camera" multiple>
<button type="button" onclick="submitform()">Submit</button>
<script>
function submitform(){
// Get files from upload
var files = $("#files").get(0).files;
// Create form data object
var fileData = new FormData();
// Loop over all files and add it to FormData object
for (var i = 0; i < files.length; i++) {
fileData.append(files[i].name, files[i]);
}
// Send files to controller
$.ajax({
url: '/Quotes/QuoteFiles/UploadFiles',
type: "POST",
contentType: false, // Not to set any content header
processData: false, // Not to process data
data: fileData,
success: function (result) {
alert(result);
},
error: function (err) {
alert(err.statusText);
}
});
}
</script>
我在谷歌瀏覽器上運行,但我已經試過IE 11和邊緣但不是他們的工作。誰能告訴我我做錯了什麼?
是否有任何錯誤消息記錄在'console'?返回一個字符串作爲'JSON'響應是什麼? – guest271314
我不認爲你可以用ajax上傳文件,你可以用iframe以模擬效果 – AbdulHamid
@AbdulHamid文件可以使用'$ .ajax()'0123上傳文件' – guest271314