我很沮丧,找不到解决方案:
我正在使用 AngularJS 和 NodeJS 创建一个项目。我从 Node JS 中的 Angular 端获取图像数据,并将这些数据发送到进一步的 API。我收到错误
{
"error": {
"detail": "Multipart form parse error - Invalid boundary in multipart: None"
}
}
这是我在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:'[email protected]',
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 });
}
});
}
在 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' } ] }
尝试按如下方式定义内容类型。
content_type='multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
我面临着同样的问题,它在 python 中对我有用。
我在尝试上传文件时也遇到了这个问题。对我来说,问题是 FormData,它是
Object
而不是 FormData instance
所以我使用下面的代码将我的对象转换为 FormData:
const getFormData = object => Object.keys(object).reduce((formData, key) => {
formData.append(key, object[key]);
return formData;
}, new FormData());
刚刚执行了我的发布请求,在我的例子中使用 Vue 资源:
return Vue.http.post(url,
getFormData(formData),
{
headers: {
'Content-Type': 'multipart/form-data'
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
无需在 header 中提及内容类型,fetch() 会自行检测其内容类型。
let formData = new FormData()
formData.append("email", email);
formData.append("password", password);
formData.append("image", image);
const response = await fetch('http://localhost:8000/api/authentication/register/', {
method: 'POST',
headers: {'X-CSRFToken': csrftoken}, //django specific
body: formData,
});
我在连接到 Django Rest API 的 Angular 11 中遇到了这个问题,我能够使用类似这样的方法来卷曲,以便使用表单上传 JSON:
curl -X POST -S \
-H 'Accept: application/json' \
-u "user:password" \
-F "name=name" \
-F "label=mylabel" \
-F "otherfields=something" \
-F "photo=@./example.png;type=image/png" \
http://127.0.0.1:8000/api/v1/item/
但是我使用标头作为 httpOptions 时遇到了该异常:
'content-type': 'multipart/form-data',
所以我刚刚注释掉了
content-type
,看来 Angular 非常聪明,他为你创建了标题,并将多部分与边界设置在一起。
欲了解更多信息: multipart/form-data 中的边界是什么?
边界只是分隔多部分有效负载的多个“部分”的“关键”。通常,像“&”这样的东西足以分隔变量,但您需要更独特的东西来分隔有效负载中的有效负载comment
您可以使用发送数据中未出现的任何值。
注意:由于边界定界符不得出现在被封装的主体部分中,因此用户代理必须谨慎选择唯一的边界参数值。
最简单的边界定界线可能类似于“---”,结束边界定界线为“-----”。
删除
'Content-Type': 'multipart/form-data',
。而且它有效。