我正在尝试apollo-datasource-rest
通过 Imgur 的 API 处理通过 URL 上传的图像(此处的文档:https ://apidocs.imgur.com/ )
我最初收到一个400
读取错误We don't support that file type!
,并确定这是由于apollo-datasource-rest
自动设置Content-Type
为application/json
. 使用 npm 包修复该问题后form-data
,我的代码如下所示:
class ImgurAPI extends RESTDataSource {
constructor() {
super();
this.baseURL = "https://api.imgur.com/3/";
}
willSendRequest(request) {
request.headers.set("Content-Type", "multipart/form-data");
request.headers.set(
"Authorization",
`Client-ID ${process.env.IMGUR_CLIENT_ID}`
);
console.log(request);
}
async uploadImageFromUrl(url) {
const formData = new FormData();
formData.append("image", url);
return this.post("upload", formData);
}
}
我现在不再收到We don't support that file type!
错误消息,但我仍然收到400
带有状态文本的响应Bad Request
。上console.log()
一个代码片段中的打印如下:
{
method: 'POST',
path: 'upload',
body: FormData {
_overheadLength: 104,
_valueLength: 80,
_valuesToMeasure: [],
writable: false,
readable: true,
dataSize: 0,
maxDataSize: 2097152,
pauseStreams: true,
_released: false,
_streams: [
'----------------------------594660553626244976225816\r\n' +
'Content-Disposition: form-data; name="image"\r\n' +
'\r\n',
'https://upload.wikimedia.org/wikipedia/commons/a/a0/Sunflower_as_gif_websafe.gif',
[Function: bound ]
],
_currentStream: null,
_insideLoop: false,
_pendingNext: false,
_boundary: '--------------------------594660553626244976225816'
},
params: URLSearchParams {},
headers: Headers {
[Symbol(map)]: [Object: null prototype] {
'Content-Type': [Array],
Authorization: [Array]
}
}
}
我在这里想念什么?API 似乎正在接受我的表单数据,所以我认为其他标题之一可能存在问题,但在 Postman 中,看起来只有几个必需的标题,其中大部分是计算出来的(例如Content-Length
),所以我假设apollo-datasource-rest
必须处理那个。