我试图与API通信以从iPhone发送图片。我使用邮递员发送表单数据(键:mainPicture,值"我选择的文件"),并且运行良好。
当我尝试在 js 中执行此操作时,问题来了:API 在我的请求中找不到该文件。
这是我的代码:
const formData = new FormData();
formData.append('mainPicture', {
uri: mainPicture.uri,
type: 'image/jpg',
name: `${mainPicture.id}.jpg`,
});
// ...
// api come from apisauce package
api.post(API_RES_IMG, formData, { headers: { ['Content-Type']: 'multipart/form-data' } })
服务器说:"错误:多部分:找不到边界"
如果没有内容类型,服务器将接收:
{"_parts":{"0":{"0":"mainPicture","1":{"uri":"assets-library://asset/asset.JPG?id=DE830A54-2526-44CB-81FE-00786D152080&ext=JPG","type":"image/jpg","name":"1e23519b-2006-4676-b63c-624e8198e17b.jpg"}}}}
从一件简单的事情上挣扎太多。
我在这里看到的几个问题:
1)使用 fetch API 时,我们不需要设置 Content-Type 标头,因为 fetch 会处理这个问题,而且它还会处理填充边界。我假设这和 apsauce 是一样的,但我可能是错的。
2) 类型:"图像/JPG"不是有效的 MIME 类型。它应该是类型:"图像/jpeg"。
您应该添加内容类型
"内容类型":类型 === "表单" ?"多部分/表单数据" : "应用程序/JSON",