Javascript 通过AJAX发送文件时,如何向文件添加属性?
我有一个MVC应用程序,我正在应用程序中上传图片文件 此操作的代码:Javascript 通过AJAX发送文件时,如何向文件添加属性?,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我有一个MVC应用程序,我正在应用程序中上传图片文件 此操作的代码: var files = $(".uploadFile").data("files"); $.each(files, function (key, value) { data.append('file', value); }) $('.userForm *').filter(':input').ea
var files = $(".uploadFile").data("files");
$.each(files, function (key, value) {
data.append('file', value);
})
$('.userForm *').filter(':input').each(function (index, value) {
data.append(value.id, $("#" + value.id).val());
});
$.ajax({
url: "/Customer/AddCustomer",
type: 'POST',
data: data,
cache: false,
processData: false,
contentType: false,
success: function (data) {
// logic
$.LoadingOverlay("hide");
},
error: function (event, jqxhr, settings, thrownError) {
// logic
$.LoadingOverlay("hide");
}
});
服务器代码:
public string AddCustomer(HttpPostedFileBase file, Customer customer)
{
// add customer and return to edit view
return partialView("customerEdit");
}
我正在尝试找出如何向发送的每个文件添加属性?
例如,对于我添加的每个文件,我都会创建一个列表,并将其附加到DOM中。
在此列表中,每个文件旁边都有一个复选框,用于指示此文件(图片)是否应为配置文件图片
如何将boelan属性附加到每个文件?多亏了@adeneo,我的大脑才得以快速启动 我不得不在这里重新考虑我的策略,因为我不想把额外的参数作为一个具体的字符串发送 我做了以下工作: 在我的第一篇文章中,我发送了文件和客户数据。我将客户保存在数据库中,对于文件,我将其存储在tempdata中,以便能够在我的第二篇文章中访问它,我将使用指定的额外参数将文件保存到数据库中 脚本:
$.ajax({
url: "/Customer/AddCustomer",
type: 'POST',
data: data,
cache: false,
processData: false,
contentType: false,
success: function (data) {
// "Pictures" is an array that contains objects with all the file names and other properties.
$.ajax({
url: "/Customer/AddCustomerPictures",
type: 'POST',
data: JSON.stringify({ pictureFiles: Pictures}),
contentType: 'application/json; charset=utf-8',
success: function(data) {
//logic
}
});
//logic
},
error: function (event, jqxhr, settings, thrownError) {
//logic
}
});
服务器代码,注意不包括整个soloution:
public ActionResult AddCustomer(CustomerM customer)
{
var Id = _iScissorFingersManager.AddCustomer(customer.FirstName, customer.LastName, customer.Email,customer.PhoenNumber);
if (Request.Files.Count != 0)
{
TempData["files"] = Request.Files;
TempData["Id"] = Id;
}
// add customer and return to edit view
return PartialView("CustomerEdit", customer);
}
public ActionResult AddCustomerPictures(List<PictureFiles> pictureFiles)
{
var files = (HttpFileCollectionBase)TempData["files"];
var id = (long) TempData["Id"];
if (files != null)
{
foreach (var p in pictureFiles)
{
for (int i = 0; i < files.Count; i++)
{
HttpPostedFileBase hpf = files[i];
p.Name == files[i].FileName && p.IsProfile ? _iScissorFingersManager.UploadCustomerPictures(hpf.InputStream, hpf.ContentType, id, true), _iScissorFingersManager.UploadCustomerPictures(hpf.InputStream, hpf.ContentType, id);
}
}
}
return PartialView("CustomerProfileImage");
}
public ActionResult AddCustomer(CustomerM customer)
{
var Id=_iScissorFingersManager.AddCustomer(customer.FirstName、customer.LastName、customer.Email、customer.PhoenNumber);
如果(Request.Files.Count!=0)
{
TempData[“files”]=Request.files;
TempData[“Id”]=Id;
}
//添加客户并返回编辑视图
返回PartialView(“CustomerEdit”,客户);
}
公共操作结果添加自定义图片(列表图片文件)
{
var files=(HttpFileCollectionBase)TempData[“files”];
变量id=(长)TempData[“id”];
如果(文件!=null)
{
foreach(pictureFiles中的var p)
{
对于(int i=0;i
您可以使用data.append('key','value')
将更多数据附加到FormData对象,例如,将文件名作为键,将布尔值作为值。我将尝试这样做,但我担心如何接收它?我接受一个模型作为具有特定属性的第二个参数。正如我说的,我会尝试它,但我有一些小疑问你必须构建你的后端来接收你发送的数据,否则它将如何工作?我现在不能构建后端模型,使其具有与picturefile相同的名称,可以吗?这是动态的,为什么不呢?您没有听说过连接,例如data.append('is\u profile'+file.name,true)