【问题标题】:React Native Multipart XMLRequest - Unrecognized FormData partReact Native Multipart XMLRequest - 无法识别的 FormData 部分
【发布时间】:2017-06-29 19:07:22
【问题描述】:

我正在尝试将一些文件上传到我的网站。以下代码在正常 API 请求时有效(不包括附件)。但是当我尝试上传文件时,我不断收到此错误响应:"Unrecognized FormData part."

export function HTTPRequest({body = {}, url = '', method = "POST", headers = {}, attachments = [], DEBUG = false}) {
    return new Promise((resolve, reject) => {
    const attachmentsCount = Object.keys(attachments).length * 1
    const ContentType = 0 < attachmentsCount ? "multipart/form-data" : "application/x-www-form-urlencoded"

    const submitXML = (xhrBody) => {
      let xhr = new XMLHttpRequest()
      xhr.open(method, url)
      headers["Content-Type"] = ContentType
      //headers["Accept"] = "application/json"
      for(var h in headers) {
        xhr.setRequestHeader(h, headers[h])
      }
      xhr.addEventListener('load', (res) => {
        switch(res.target.status) {
            case 200: return resolve(DEBUG ? res.target.response : JSON.parse(res.target.response))
            default: return reject(res)
        }
      }, false)
      xhr.onerror = e => reject(e)
      xhr.send(xhrBody)
    }

    switch(attachmentsCount) {
        case 0:
          var request = JSON.stringify(body)
          submitXML(request)
        break
      default:
        let xhrBody = new FormData()
        xhrBody.append("_photosCount", String(attachmentsCount))
        attachments.map((file, i) => {
        xhrBody.append('file', {name: file.name, src: file.src, type: file.type})
        })
        xhrBody.append('data', body)
        console.log(xhrBody);
        submitXML(xhrBody)
    }
  })
}

这是我尝试记录的 FormData 对象:

    0:"file"
    1: Object
    name:"FB_IMG_1498693908215.jpg"
 src:"content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F175865/ORIGINAL/NONE/1351181913"
    type:"image/jpeg"

【问题讨论】:

    标签: javascript react-native


    【解决方案1】:

    您将 Content-Type 标头设置为 multipart/form-data,但没有描述多部分边界标记的参数。

    保留 Content-Type 标头。让 XMLHttpRequest 从 FormData 对象生成它。

    【讨论】:

    • 成功了,谢谢。但是我在追加文件数据时不是添加描述多部分边界标记的参数吗?
    • @Raymond — 不是您明确指定的内容类型 HTTP 标头,但其中不包含边界参数。数据本身有边界,但解析器不知道它们是什么。
    猜你喜欢
    • 2022-12-19
    • 1970-01-01
    • 2016-10-03
    • 2021-04-27
    • 2020-10-20
    • 2017-11-08
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多