做一个透传上传文件的接口:
client -文件-> Nest Server -文件-> 第三方服务
在 Nest Server 里使用了 FileInteceptor
来获取上传文件。
@Post('upload')
@UseInterceptors(FileInterceptor('file'))
uploadFile(@UploadedFile() file: Express.Multer.File) {
console.log(file);
}
然后用 form-data
在 Node 端生成 FormData 再传给第三方服务。
第三方服务一直说我没有把文件传上去。
后面发现自己太zz了,在 Postman 里没有添加 Content-Type: multipart/form-data
:
后来又报了这个错误:
multipart: Boundary not found
经过一顿排查后发现了我的 Postman 还是 Chrome 的插件,这个插件的版本已经非常老了,只有 v5.x,而现在已经到了 v9.x 版本。
推荐别再使用 Chrome 插件版的 Postman 工具,而使用客户端的 Postman。
终于不再报 multipart: Boundary not found
这个错误,转而报没有收到文件的问题,唉。
又一翻排查后,我发现了 Stackoverflow 这个帖子:
总的来说就是,你得在 append
的时候要把文件对应的属性都要加上,这个帖子其实不全,应该要把所有 File 的属性都加上 form-data
才会帮你把文件强加上:
async postFileRequest(url: string, file: Express.Multer.File, query: any = {}, options = {}) {
// 组装 formData
const formData = new FormData();
// 每个属性都不能少
formData.append('media', file.buffer, {
filename: file.filename,
contentType: file.mimetype,
knownLength: file.size,
filepath: '', // 假的就可以
});
}