javascript - Hvordan hente/analysere det binære innholdet fra et Multipart-svar i NodeJS?
Jeg vil trekke ut binærinnholdet fra et multipart-svar som jeg har som følger -
Jeg har ikke tilgang til noe request-objekt (Express/NodeJS). Jeg har bare dette response-objektet som jeg vil analysere og hente ut den binære delen av det.
REDIGER -
For å gjøre ting tydeligere -
Jeg har et endepunkt (ikke en tradisjonell Express-app, men FaaS) - kalt "/fileUpload"
Dette endepunktet godtar alle typer forespørsler - GET, POST, PUT (FaaS).
Når jeg gjør en POST/PUT-forespørsel med en fil -
testImage.PNGi skjemaopplysningene, mottar jeg innholdet i forespørselsobjektet. FaaS-runtime gir req-objektet som en parameter til funksjonens handler.Nå, når jeg skriver ut - request.body av den innkommende POST-forespørselen, får jeg innholdet som vist på bildet ovenfor.
Hvis jeg prøver å laste opp dette binære innholdet direkte til S3, fører det til ødeleggelse av bildet, som jeg tror skyldes tilstedeværelsen av ekstra innhold i multipart-responsen som -
Content-Disposition...
Det jeg ønsker å gjøre er å analysere det ekstra flerdelte innholdet som Content-Type-headeren og flerpartsgrensen osv., slik at jeg kun får bildebinæret.
Svar #1
For å trekke ut det binære innholdet, må vi fjerne/analysere header- og grensesnittseksjonene av det. Det finnes et bibliotek - parse-multipart som gjør det enkelt å gjøre dette.
Eksempel -
Forutsetter at forespørselsheaderen inneholder en content-type-header.
var multipart = require('parse-multipart');
// The following section is the express endpoint/ FaaS handler
{
let header = req.headers["content-type"]
let boundary = header.split(" ")[1]
boundary = header.split("=")[1]
let body = event.data;
//console.log("Boundary - "+ boundary)
let parts = multipart.Parse(body, boundary);
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
console.log(part)
var params = {
Bucket: s3bucket,
Key: part.file,
Body: part.data,
ACL: 'public-read',
Metadata: {
'Content-Type': part.type
}
};
//Upload the data to aws
const data = await s3.putObject(params).promise()
}
return parts
}
Svar #2
Jeg slet i mange dager med dette problemet. Løsningen var i API GATE WAY > konfigurasjon > Binære typer legg til multipart/form-data.

