[英]How to send nested object with array of objects including files in FormData?
我有一個嵌套的 object ,其中一些值是對象的 arrays 。 這些對象有一個字段作為文件。 這是 object 結構。
{
"shop_name":"Organic Farm Shop",
"shop_logo": File,
"description":"Lorem ipsum dolor sit amet consectetur adipisicing elit. ",
"category":"Grocery",
"shop_url":"organic-farm",
"product_details":[
{
"product_name":"Fresh Carrots",
"product_image": File,
"price":45,
"stock":10,
"unit":"Kg",
"catogoryName":"Frozen Foodss"
},
{
"product_name":"Fresh Cucumbers",
"product_image": File,
"price":80,
"stock":20,
"unit":"Kg",
"catogoryName":"Frozen Foodss"
}
],
"page_input":[
{
"inputLabel":"Address",
"inputType":"multiline_text"
},
{
"inputLabel":"Mobile Number",
"inputType":"numbers"
}
]
}
我如何 append 這個到 FormData? 或者有沒有更好的方法可以在不使用 FormData 的情況下做到這一點?
您應該首先對其進行字符串化:
var expressiveObjectVariableName = JSON.stringify(expressiveObjectName);
然后正常 append 就可以了。
form.append('expressiveFieldName', expressiveObjectVariableName );
編輯:
對於嵌套對象,arrays 和文件,描述的問題,試試這個:
JavaScript版
function toFormData(obj, form, namespace) {
let fd = form || new FormData();
let formKey;
for(let property in obj) {
if(obj.hasOwnProperty(property) && obj[property]) {
if (namespace) {
formKey = namespace + '[' + property + ']';
} else {
formKey = property;
}
// if the property is an object, but not a File, use recursivity.
if (obj[property] instanceof Date) {
fd.append(formKey, obj[property].toISOString());
}
else if (typeof obj[property] === 'object' && !(obj[property] instanceof File)) {
toFormData(obj[property], fd, formKey);
} else { // if it's a string or a File object
fd.append(formKey, obj[property]);
}
}
}
return fd;
}
TypeScript版
function createFormData(object: Object, form?: FormData, namespace?: string): FormData {
const formData = form || new FormData();
for (let property in object) {
if (!object.hasOwnProperty(property) || !object[property]) {
continue;
}
const formKey = namespace ? `${namespace}[${property}]` : property;
if (object[property] instanceof Date) {
formData.append(formKey, object[property].toISOString());
} else if (typeof object[property] === 'object' && !(object[property] instanceof File)) {
createFormData(object[property], formData, formKey);
} else {
formData.append(formKey, object[property]);
}
}
return formData;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.