Angular 2没有将Content-Type设置为'multipart / form-data',而是设置为'application / json'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular 2没有将Content-Type设置为'multipart / form-data',而是设置为'application / json'相关的知识,希望对你有一定的参考价值。

我正在尝试在基于Angular 2的Ionic移动项目中上传文件。

我有一个FormData对象,至少有3个字段(_id,类型和文件)。

this.formData = new FormData();
if (fileCount > 0) { // a file was selected
  for (let i = 0; i < fileCount; i++) {
    this.formData.append('file', inputEl.files.item(i));
  }
}

[... in the upload method I pass this.formData as files ...]

files.append('_id', data._id);
files.append('tipo', tipo);

我把它传递给我的上传方法,并将“Content-Type”设置为'multipart / form-data'

let options: RequestOptionsArgs = new RequestOptions();
options.headers = this.headers; (In this.headers I have my Authorization header set)
options.headers.delete('Content-Type');
options.headers.set('Content-Type', 'multipart/form-data');

我发了一篇http帖子

this.http.post(
  `${this.apiUrl}/utenti/upload`,
  files,
  options
)

但我收到服务器的错误回复:

Sorry, an error occurred loading the page (500)
Unexpected token -

我查看Chrome的网络标签,我可以看到我的请求标头错误:

Content-Type: application/json

另一方面,我的有效负载是正确的,具有表单数据样式:

------WebKitFormBoundaryKiWq1WTTF3AJCFRX
Content-Disposition: form-data; name="file"; filename="IMG_0001.JPG"
Content-Type: image/jpeg


------WebKitFormBoundaryKiWq1WTTF3AJCFRX
Content-Disposition: form-data; name="_id"

58e7b968bed0575e13efc63c
------WebKitFormBoundaryKiWq1WTTF3AJCFRX
Content-Disposition: form-data; name="tipo"

foto
------WebKitFormBoundaryKiWq1WTTF3AJCFRX--

对这里的错误有什么猜测?

答案

如果您已实现拦截器,请检查您是否未覆盖标头。

以上是关于Angular 2没有将Content-Type设置为'multipart / form-data',而是设置为'application / json'的主要内容,如果未能解决你的问题,请参考以下文章

有条件地在 Angular 2 或 4 中将输入字段设为只读:建议 + 最佳/采用哪种方式

将 JSON 从 Angular 2 发布到 php

使用 Javascript(或 Angular)在每个部分上使用不同的 Content-Type 组合 multipart/form-data

Angular 6:无法正确设置 http Header 的 Content-Type

当它是具有 angular2 的外部源时,标头中没有 jwt 令牌授权

Angular6 http post方法不会将数据传递给web api