我正在上傳文件,爲此我在jQuery ajax中使用FormData對象並將它傳遞給ASP.NET MVC WEB API,它工作正常,我能夠獲取文件在服務器端,但我想通過相同的請求傳遞一些額外的細節。如何將FormData中的其他數據發送到web api
我可以在標題中添加額外的數據,並且我可以在服務器端從頭文件中獲取數據,但是我也會爲移動應用使用相同的API。所以如果我可以將數據作爲函數的參數傳遞,那麼它會很好。
那麼如何在formData對象中傳遞額外的數據以及如何在服務器端獲取它呢?
我的代碼,
function uploadEvaluationFile() {
var files = $("#file_UploadFile1").get(0).files;
if (files.length > 0) {
if (window.FormData !== undefined) {
var data = new FormData();
for (var x = 0; x < files.length; x++) {
data.append("file1" + x, files[x]);
}
data.append("UserId", 5);
data.append("ArtCategory", 5);
data.append("Title", "Title1");
data.append("Description", "Desc 1");
$.ajax({
type: "POST",
url: '/Home/saveEvaluationFile',
contentType: false,
processData: false,
data: data,
async: false,
beforeSend: function (xhr) {
xhr.setRequestHeader('identifier', 111);
xhr.setRequestHeader('oldFileName', 222);
},
dataType: "json",
success: function (result) {
console.log(result);
},
error: function (err) {
console.log(err);
}
});
} else {
alert("This browser doesn't support HTML5 file uploads!");
}
}
}
網絡API代碼,
[HttpPost]
public async Task<JsonResult> saveEvaluationFile(EvaluationFileDetails FileData)
{
IEnumerable<string> headerValues = Request.Headers.GetValues("oldFileName");
var oldFileName = headerValues.FirstOrDefault();
IEnumerable<string> headerValues1 = Request.Headers.GetValues("identifier");
var newFileName = headerValues1.FirstOrDefault();
try
{
foreach (string file in Request.Files)
{
HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
}
}
catch (Exception)
{
return Json("Upload failed");
}
return Json("File uploaded successfully");
}
我的班級,
public class EvaluationFileDetails
{
public HttpPostedFileBase file1 { get; set; }
public int UserId { get; set; }
public int ArtCategory { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
可能重複[如何追加整套模型在MVC以FORMDATA和獲得它](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc) –
我不能通過HttpPostedFileBase,因爲我我沒有使用表單標籤。在對象中,我也可以添加文件。 ? –
不確定你的意思。你可以使用FormData傳遞任何你想要的東西。但是如果你只是爲你的方法添加參數(例如模型),你會發現這很容易,所以你沒有訪問值的形式請求' –