【问题标题】:API doesn't receive file + text posted through a FormDataAPI 不接收通过 FormData 发布的文件 + 文本
【发布时间】:2026-01-06 18:05:02
【问题描述】:

我想将带有文本的文件上传到我的 api。 Api 说模式不是 JSON,而是多部分。因此,我将信息(图像和文本)包含在 FormData 中,以便之后将其发布到 api。 这看起来像这样:

我的班级模型:

export class FormData {
    image: any;
    category: string;

   constructor(args){
      this.image = args.image;
      this.category = args.category;
   }
  }

api 调用:

apiSubmit() {
  const formData = new FormData(this.categoryForm.value);
  console.log(formData);

  this.http.post<any>(this.url, formData, httpOptions).subscribe(
    (res) => console.log(res),
  );
}

这些值实际上是分配给 formData,因此 FormData 既有文件的值,也有存储的文本的值。

但不知何故,数据并没有正确地找到它的api:(当我想发布时,api吐出以下错误。

我是否必须以某种方式单独显示 api,FormData 的哪一部分是文件,哪一部分是字符串?如果是,我该怎么做?

【问题讨论】:

  • @CherryDT 实际上当我将其更改为File它不会引发新错误。这都一样。我怎么能在我的代码中使用你提到的 await 东西来做到这一点。我真的不知道在哪里进行更改。

标签: javascript angular typescript xmlhttprequest ionic4


【解决方案1】:

这也许行得通。您必须发送 Blob 类型。

在本例中,我将发送一个 base64 文件,这是一个更好的选择。

export class FileData {
    contentBase64: string;
    mimeType: string;
    name: string;
}

apiSubmit() {
  const formData = new FormData();
  const blob = new Blob([file.contentBase64], { type: file.mimeType });
  formData.append('file', blob, file.name);

  this.http.post<any>(this.url, formData, httpOptions).subscribe(
    (res) => console.log(res),
  );
}

【讨论】:

    最近更新 更多