![](/img/trans.png)
[英]Is there a way to put Express.Multer.File into a FormData object?
[英]How convert Express.Multer.File to Blob data?
我的 controller 中有一個NestJs項目 我接受Express.Multer.File但我需要將它發送到另一台服務器。 如何將其轉換為Blob以傳遞給FormData ?
#action in my controller
@Post('/upload')
@UseInterceptors(FileInterceptor('avatar'))
async uploadUserProfileAvatar(@UploadedFile() file: Express.Multer.File){
console.log(file)
let blob = new Blob(file.mimetype)
let formData = new FormData()
//can't set because file is not Blob
formData.append('file',file)
let request$ = this.httpService.post('http://test_server/file',formData,{headers:{
'Content-Type':'multipart/form-data'
}}).pipe(
map(response => response.data)
)
request$.subscribe( response => {
console.log(response)
return response
})
}
我將不勝感激每一個答案!
編輯:
再次感謝您的幫助,結果:我設法通過這種方式成功發送了代碼:
@Post('/upload')
@UseInterceptors(FileInterceptor('avatar'))
async uploadUserProfileAvatar(@UploadedFile() file: Express.Multer.File){
const FormData = require('form-data');
const formData = new FormData();
formData.append('file', Buffer.from(file.buffer) , file.originalname);
let request$ = this.httpService.post('http://nginx_files/file',formData,{headers:formData.getHeaders()}).pipe(
map(response => response.data)
)
request$.subscribe( response => {
console.log(response)
return response
})
}
像這樣使用formdata
package:
const FormData = require('form-data');
const formData = new FormData();
formData.append('file', fileContent, 'file_name.ext');
let request$ = this.httpService.post('http://test_server/file',
formData,
{ headers: formData.getHeaders() }
).pipe(
map(response => response.data)
)
遇到同樣的問題,但最初的答案對我不起作用,不得不添加Content-Length
header 和contentType
,所以代碼看起來像這樣:
import * as FormData from 'form-data';
// ...
processFile(file: Express.Multer.File) {
const formData = new FormData();
formData.append('file', Buffer.from(file.buffer), {
filename: file.originalname,
contentType: file.mimetype,
});
return this.httpService
.post('http://test_server/file', formData, {
headers: {
...formData.getHeaders(),
'Content-Length': `${formData.getLengthSync()}`,
},
})
.pipe(map((response) => response.data));
}
基於此評論
@MiyRon
您會收到錯誤“TypeError: source.on is not a function”,因為 formData 只接受三種類型的元素。 字符串、緩沖區和 Stream。
因此,您可以使用以下方法修復它:
formData.append('file', JSON.stringify(fileContent), 'file_name.ext');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.