我正在上传文件,为此我在jquery ajax中使用FormData对象并将其传递给ASP.NET MVC 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!");
}
}
}
web api code,
[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; }
}
答案 0 :(得分:2)
您可以使用相同的
data.append("file1" + x, files[x]);
例如:
formdata.append('Key', 'Value');
获取数据
[HttpPost]
public async Task<JsonResult> saveEvaluationFile(FileModel model)
{
foreach (string image in model.images)
{
HttpPostedFileBase hpf = model.images[image ] as HttpPostedFileBase;
// nesasary save part
}
将文件添加到模型
public class FileModel
{
...
public HttpPostedFileBase File1 { get; set; }//one file
public IEnumerable<HttpPostedFileBase> images {get;set;}//file collection
}