Javascript FormData如何在多部分/表单数据中获取或设置边界-角度

Javascript FormData如何在多部分/表单数据中获取或设置边界-角度,javascript,angularjs,multipartform-data,Javascript,Angularjs,Multipartform Data,我有一个迷你应用程序,在那里我必须将表单数据从浏览器发布到端点 这是我的帖子: var formData = new FormData(); formData.append('blobImage', blob, 'imagem' + (new Date()).getTime()); return $http({ method: 'POST', url: api + '/url', data: formData, headers: {'Content-Type': 'multip

我有一个迷你应用程序,在那里我必须将表单数据从浏览器发布到端点

这是我的帖子:

var formData = new FormData();
formData.append('blobImage', blob, 'imagem' + (new Date()).getTime());

return $http({
  method: 'POST',
  url: api + '/url',
  data: formData,
  headers: {'Content-Type': 'multipart/form-data'}
})

边界似乎是由formData添加到参数中的,但是,我无法让它发送到标题中,我该怎么做?

好吧,似乎标题ContentType应该是未定义的,为了添加正确的边界,正确的方法是不设置
内容类型
标题

例如:

从'@angular/common/http'导入{http}
函数sendPostData(形式:FormData){
常量url=`https://post-url-example.com/submit`;
常量选项={
标题:新的HttpHeaders({
授权:`承载身份验证令牌`
})
};
返回http.post(url、表单、选项);
}
进一步加入

当http请求正文具有
FormData
类型时,angular将延迟
内容类型
头分配给浏览器
detectContentTypeHeader()
将在
FormData
请求正文上返回
null
,angular不会设置请求标头

这是在
@angular/commons/http/src/xhr.ts
模块上

//如果内容类型标头不存在,则自动检测该标头。
如果(!req.headers.has('Content-Type')){
const detectedType=req.detectContentTypeHeader();
//有时内容类型检测失败。
if(detectedType!==null){
xhr.setRequestHeader('Content-Type',detectedType);
}
}
基于请求正文的内容类型检测:

detectContentTypeHeader():字符串| null{
//空正文没有内容类型。
if(this.body==null){
返回null;
}
//FormData实体依赖于浏览器的内容类型指定。
if(isFormData(this.body)){
返回null;
}
//Blob通常有自己的内容类型。如果没有,则
//无法推断任何类型。
if(isBlob(这个主体)){
返回this.body.type | | null;
}
//数组缓冲区具有未知内容,因此无法推断类型。
if(isArrayBuffer(此主体)){
返回null;
}
//从技术上讲,字符串可以是JSON数据的一种形式,但它足够安全
//假设它们是纯字符串。
if(typeof this.body=='string'){
返回“text/plain”;
}
//`HttpUrlEncodedParams`有自己的内容类型。
if(this.body instanceof HttpParams){
返回“application/x-www-form-urlencoded;charset=UTF-8”;
}
//数组、对象和数字将被编码为JSON。
if(typeof this.body=='object'| | typeof this.body==='number'||
Array.isArray(此.body)){
返回“application/json”;
}
//无法推断任何类型。
返回null;
}
资料来源:


您在
“多部分/表单数据”中缺少了结束语
谁否决了这个答案,谁可能都懒得尝试一下。它确实奏效了,正是我想要的。传递
undefined
将覆盖我的应用程序中
$http
的默认行为,这将发送
内容类型:application/json
。现在我有了自动发送边界的
多部分/表单数据
。我可以诚实地确认提议的解决方案按预期工作,我的头撞在我的桌子上。我的意思是,这不应该起作用,但它确实起作用了。我使用的框架无法检测和拆分
表单数据
对象,而
内容类型
设置为
多部分/表单数据
,但如果我将其从标题中取出,则可以。你刚刚救了我一天@Eli根本不设置内容类型。例如,
const headers=新的HttpHeaders()