javascript - Hur konverterar man Express.Multer.File till Blob-data?
Jag har ett NestJs-projekt och i min controller accepterar jag en Express.Multer.File men jag behöver skicka den till en annan server. Hur kan jag konvertera den till en Blob för att kunna skicka den med 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
})
}
Jag kommer att vara tacksam för varje svar!
REDIGERA:
Tack igen för din hjälp! Som ett resultat lyckades jag skicka koden på detta sätt:
@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
})
}
Svar #1
Använd formdata-paketet så här:
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)
)
Svar #2
@MiyRon
Du får felet "TypeError: source.on är inte en funktion", eftersom formData endast accepterar tre typer av element: String, Buffer och Stream.
Så du kan fixa det med:
formData.append('file', JSON.stringify(fileContent), 'file_name.ext');
