微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用包括 FormData 中的文件在内的对象数组发送嵌套对象?

如何解决如何使用包括 FormData 中的文件在内的对象数组发送嵌套对象?

我有一个嵌套对象,其中一些值是对象数组。这些对象有一个字段作为文件。这是对象结构。

{
  "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","price":80,"stock":20,"catogoryName":"Frozen Foodss"
    }
  ],"page_input":[
    {
      "inputLabel":"Address","inputType":"multiline_text"
    },{
      "inputLabel":"Mobile Number","inputType":"numbers"
    }
  ]
}

如何将其附加到 FormData?或者有没有更好的方法可以在不使用 FormData 的情况下做到这一点?

解决方法

你应该先把它字符串化:

var expressiveObjectVariableName = JSON.stringify(expressiveObjectName);

然后通常追加它。

form.append('expressiveFieldName',expressiveObjectVariableName );

More info

编辑:

对于嵌套对象、数组和文件,描述的问题,试试这个:

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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。