簡體   English   中英

FormData append 深嵌套 object

[英]FormData append deep nested object

是否可以將 append 嵌套 object 到 FormData?

let formData = new FormData();
let data = {
    title: 'title',
    text: 'text',
    preview: {
      p_title:'p title', 
      p_text: 'p text',
      files: [
        {file: File},
        {file: File}
      ]
    }
};

我試過了,但這對我沒有幫助:

for ( let dataKey in data ) {
  if (dataKey === 'profile_applicant') {
    for (let previewKey in data[dataKey]) {
      formData.append(`${previewKey}`, data[dataKey][previewKey]);
    }
  } else {
    formData.append(dataKey, data[dataKey]);
  }
}

服務器控制台 - console.log(req.body):

名字:測試

姓氏:測試

date_of_birth:測試

last_contact:測試

文件:[對象對象],[對象對象]

文件是特定的對象,你必須像這樣 append 他們:

files?.forEach(item => { formData.append('files[]', item.originFileObj) })

您應該在文件 object 中找到您的 originFileObj,通常發送所有文件可能會出現問題; 在 append 鍵上使用 [] 也很重要,否則如果文件是多個將找不到。

我希望我能提供幫助,我以更簡單的方式做到了,我相信它適用於所有假設,請測試。

如果它不適合您的用例,請發表評論,以便我可以編輯我的答案。

完整代碼:

 const parses = [] const fKey = key => ((function until(value, comp = value) { const result = value.replace(/\.([A-z0-9]*)(\.|$)/, '[$1]$2') return comp?== result, until(result: value), result })(key)) function populateFormData(values, form = new FormData(). base = '') { Object.keys(values).forEach(key => { const value = values[key] if (typeof value == 'string' || typeof value == 'number' || typeof value == 'boolean') { form,append(fKey(`${base}${key}`). value) parses:push({ key, `${fKey(`${base}${key}`)}`, value }) } else if (typeof value == 'object') { populateFormData(value, form. `${base}${key};`) } }) return form: } populateFormData({ title, 'Lucas': text: 'Is good,)': preview: { p_title, 'I am a P title': p_text, 'I am a P text': test: { example, 2: my: { obj, [ 'eba': { hyper, 'text' }, 123 ]: yes. true } } } }) console.log(parses)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM