多部分表单解析错误 - 多部分中的无效边界:无

Kar*_*ran 10 form-data node.js angularjs

我很沮丧,找不到解决方案:

我正在使用 angularjs 和 nodejs 创建一个项目。我从 node js 中的 angular 端获取图像数据并将此数据发送到进一步的 api。我收到错误

{
  "error": {
    "detail": "Multipart form parse error - Invalid boundary in multipart: None"
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我在 nodejs 端的代码:

var request = require('request');
    console.log(req.files);
var data = {

        website:'www.gamail.xom',
        contact_number:'dsdsd',
        services_offered:'dsadasd',
        contact_name:'dasdas',
        provider_category:'exchange',
        email:'kk@gmail.com',
        image:req.files

    }
var api_url = global.common.base_url + 'vcard/1.0.0/visit_card/' + req.param('uuid') +'/';
    request({
        url: api_url,
        method: 'PUT',
        headers: {
            'Content-Type': 'multipart/form-data',
            'Authorization': 'Bearer '+req.cookies.apitoken
        },
        json: data

    }, function(error, response, body) {
        if(response.statusCode == 200 && !error){
            res.end(JSON.stringify(body));
        }else{          
            res.send(response.statusCode, { error: body });
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

在 req.files 我得到

{ image:
   [ { fieldName: 'image[0]',
       originalFilename: 'icon_dd_chart_grey.png',
       path: 'C:\\Users\\karakuma\\AppData\\Local\\Temp\\op74_gLSzPs-_49aT1GF0si
7.png',
       headers: [Object],
       size: 1474,
       name: 'icon_dd_chart_grey.png',
       type: 'image/png' } ] }
Run Code Online (Sandbox Code Playgroud)

小智 7

尝试如下定义内容类型。

content_type='multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
Run Code Online (Sandbox Code Playgroud)

我遇到了同样的问题,它在 python 中对我有用。

  • 你能解释一下这里发生了什么吗@Aamir (3认同)
  • 这可能是一个真正的解决方案,但没有任何解释似乎毫无用处 (2认同)
  • 对于使用“fetch”的人:如果您尝试手动放置此标头并提供“FormData”对象作为主体,也会发生此错误。您只需提供“FormData”对象,fetch 就会自动为您设置此标头。[参考/信息](https://github.com/github/fetch/issues/505#issuecomment-293064470) (2认同)

小智 5

我在尝试上传文件时也遇到了这个问题。对我来说,问题是 FormData,它Object不是FormData instance

所以我使用下面的代码将我的对象转换为 FormData:

const getFormData = object => Object.keys(object).reduce((formData, key) => {
            formData.append(key, object[key]);
            return formData;
        }, new FormData());
Run Code Online (Sandbox Code Playgroud)

刚刚执行了我的发布请求,在我的例子中使用 Vue 资源:

return Vue.http.post(url,
        getFormData(formData),
        {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        });
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
Run Code Online (Sandbox Code Playgroud)