2017-06-29 51 views
0

我想上传一些文件到我的网站。以下代码适用于正常的API请求(不包括附件)。但是当我尝试上传文件时,我一直在收到此错误响应:"Unrecognized FormData part."反应本机多部分XMLRequest - 无法识别的FormData部分

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" 

回答

0

你设置Content-Type头,以multipart/form-data没有描述多界碑参数。

单独留下Content-Type标题。让XMLHttpRequest从FormData对象生成它。

+0

它的工作表示感谢。但是当我追加文件数据时,我不添加描述多部分边界标记的参数吗? – Raymond

+0

@Raymond - 不包含你明确指定的内容类型的HTTP头,但不包含边界参数。数据本身有边界,但解析器不知道它们是什么。 – Quentin