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 -

  1. Jeg har et endepunkt (ikke en tradisjonell Express-app, men FaaS) - kalt "/fileUpload"

  2. Dette endepunktet godtar alle typer forespørsler - GET, POST, PUT (FaaS).

  3. Når jeg gjør en POST/PUT-forespørsel med en fil - testImage.PNG i skjemaopplysningene, mottar jeg innholdet i forespørselsobjektet. FaaS-runtime gir req-objektet som en parameter til funksjonens handler.

  4. Nå, når jeg skriver ut - request.body av den innkommende POST-forespørselen, får jeg innholdet som vist på bildet ovenfor.

  5. 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.