use*_*584 8 file-upload node.js axios nestjs
我需要将文件上传到 API 网关。添加一些元信息后,文件应该发送到另一个(微)服务(如 Content-Type: multipart/form-data)。我在 API 网关中构建 FormData 对象时遇到了一些问题。我不想在网关上保留文件,所以我基本上只是想通过它。
为了创建 formData 对象,我使用了Form-Data
这是一个尝试:
// Controller
@Post()
@UseInterceptors(FileInterceptor('file'))
async create(@Res() res, @UploadedFile('file') file, @Body() body: any) {
return await this.someService.create(file);
}
Run Code Online (Sandbox Code Playgroud)
// Service
async create(file: any) {
const formData = new FormData();
formData.append('file', file);
formData.append('key', 'value');
const formHeaders = formData.getHeaders();
try {
const result = await this.httpService
.post('http://some-other-service/import', formData , {
headers: {
...formHeaders,
},
})
.toPromise();
return result.data;
} catch (e) {
throw new BadGatewayException();
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
TypeError: source.on is not a function
at Function.DelayedStream.create (/usr/app/node_modules/delayed-stream/lib/delayed_stream.js:33:10)
at FormData.CombinedStream.append (/usr/app/node_modules/combined-stream/lib/combined_stream.js:44:37)
at FormData.append (/usr/app/node_modules/form-data/lib/form_data.js:74:3)
at ImportService.<anonymous> (/usr/app/src/import/import.service.ts:47:18)
Run Code Online (Sandbox Code Playgroud)
小智 6
这个问题有点老了,但有人可能会从这个解决方案中受益。
问题是您将整个 @UploadedFile 对象传递给 formData.append 方法。@UploadedFile 对象包含来自文件的数据,还包含 mimetype、大小、字段名(在本例中为“文件”)、originalname(原始文件名)等。
您需要将尝试上传的文件的实际内容传递给 formData.append 方法。
所以为了让它工作,使用
formData.append('file', file.buffer);
//OR
formData.append('file', file.buffer, file.originalname);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1788 次 |
最近记录: |