Node.js中如何将Buffer转换为文件对象进行POST请求?
问题解决:Buffer图片POST到期望接收fs流的端点
错误原因
- 手动设置
Content-Type: multipart/form-data会丢失form-data必需的boundary参数,导致请求格式错误 - 直接传递Buffer给form-data,未适配目标端点期望的可读流类型,引发类型校验错误
修正后的代码
@Post('upload') @UseInterceptors(FileInterceptor('image')) async create(@UploadedFile() image: Express.Multer.File) { const FormData = require('form-data'); const { Readable } = require('stream'); // 将Buffer转换为可读流,匹配目标端点期望的流类型 const bufferStream = Readable.from(image.buffer); const bodyFormData = new FormData(); // 追加流时指定文件名和MIME类型,模拟fs.createReadStream的传递方式 bodyFormData.append('image', bufferStream, { filename: image.originalname, contentType: image.mimetype }); // 不要手动设置Content-Type,使用formData自动生成的headers(包含boundary) const response = await this.httpService.post('目标端点URL', bodyFormData, { headers: { ...bodyFormData.getHeaders() } }).toPromise(); // 若使用Axios v0.21+,可直接await无需toPromise return response.data; }
关键说明
- 用
Readable.from()将Buffer转为可读流,对齐原示例中fs.createReadStream的流类型 - 依赖
form-data库自动生成包含boundary的请求头,避免手动设置导致的格式错误 - 追加表单字段时指定文件名和MIME类型,确保目标端点能正确识别文件信息
内容的提问来源于stack exchange,提问作者Kevin192291
相关产品推荐
相关产品推荐

