【问题标题】:How to remove Content-Type from multipart/form-data Body Request?如何从 multipart/form-data 正文请求中删除 Content-Type?
【发布时间】:2019-08-13 20:34:35
【问题描述】:

我正在尝试将文件数组作为多部分/表单数据上传。 我使用 ngx-file-upload v6.0.1

这里是从库示例中稍微改变的方法。我正在复制它以显示该文件的类型为 File。

public onFileAdded (files: UploadFile[]) {
for (const droppedFile of files) {
  if (droppedFile.fileEntry.isFile) {
    const fileEntry = droppedFile.fileEntry as FileSystemFileEntry;
    fileEntry.file((file: File) => {
      this.certificates$.next({
        type: ACTIONS.ADD,
        value: new Certificate(file, this.getSizeString(file.size), droppedFile.relativePath)
      });
    });
  }
}

这里是 onSubmit 方法:

public submitCertificates(certificates: Certificate[]): Observable<Certificate[]> {
const url = this.completionCertificatesUrl;
const headers = new HttpHeaders({'Content-Type': 'multipart/form-data'});

const formData = new FormData();
certificates.forEach(certificate => {
  formData.append('files', certificate.file, certificate.relativePath);
})

return this.http.post<any>(url, formData, {headers}).pipe(
  map(data => data)
);

发送的 Post 请求包含以下数据: request payload

问题是后端(我无法访问也无法理解的 Spring 框架)抛出 500 并且不接受此有效负载。 有人告诉我正确的有效载荷应该是这样的:

Content-Type: multipart/form-data; boundary=79ab782d574b45598e6e50d722985144

--79ab782d574b45598e6e50d722985144
Content-Disposition: form-data; name="files"; filename="file-1.json"

content of file-1 file
--79ab782d574b45598e6e50d722985144
Content-Disposition: form-data; name="files"; filename="fil2-2.zip"

content of file-2 file
--79ab782d574b45598e6e50d722985144--

我的问题是如何从我的负载中删除“Content-Type”键?

我确实尝试了很多 append()、delete() 的组合,但没有结果。 另外,我担心该文件是否真的附加到此请求中。我可以检查一下吗?

我想知道我是否完全丢失了文件的内容,因为在我提供的示例中,有一行“file-1 的内容”,也许这是代表文件的更长字符串的快捷方式内容。 请帮忙!

【问题讨论】:

    标签: javascript angular multipartform-data


    【解决方案1】:

    我的问题是如何从我的负载中删除“Content-Type”键?

    看看你在哪里设置的:

    删除这一行:

    const headers = new HttpHeaders({'Content-Type': 'multipart/form-data'});
    

    从此行中删除headers

    return this.http.post<any>(url, formData, {headers}).pipe(
    

    【讨论】:

    • 嗨@Quentin,不幸的是,这并不能解决问题。此处的标头在请求的标头部分中设置标头。我需要从请求的有效负载部分中删除“Content-Type="application/json"”。这是用类似的话描述的类似问题,但imo问题不一样。 stackoverflow.com/questions/30584155/…
    • @Marcin – 这没有意义。 必须 部分有一个Content-Type 标头,除非它们是纯文本。否则违反the spec。没有办法阻止浏览器添加它们 AFAIK。 (显式设置 HttpHeaders({'Content-Type': 'multipart/form-data'}) 应该会导致问题,因为缺少 boundary 参数,因此删除它应该可以解决问题,但从各个部分中删除 Content-Type 只会产生问题,即使它是可能的)
    • 你是如何完成这项工作的?
    猜你喜欢
    • 1970-01-01
    • 2022-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2020-12-06
    • 2013-09-03
    相关资源
    最近更新 更多