如何从 NodeJS 中的多部分响应中提取/解析二进制内容?

Bou*_*Dev 5 javascript multipartform-data multipart node.js express

我想从多部分响应中提取二进制内容,如下所示 - 多部分响应

我无权访问任何请求对象(Express/NodeJS)。我只有这个响应对象,我想解析并提取它的二进制部分。

编辑-

为了让事情更清楚 -

  1. 我有一个端点(不是传统的 Express 应用程序,而是 FaaS) - 称为“/fileUpload”

  2. 该端点接受所有类型的请求 - GET、POST、PUT (FaaS)。

  3. 当我在表单数据中使用文件发出 POST/PUT 请求时testImage.PNG,我会收到请求对象中的内容。FaaS 运行时提供 req 对象作为函数处理程序的参数。

  4. 现在,当我打印传入 POST 请求的 request.body 时,我得到的内容如上图所示。

  5. 如果我尝试将此二进制内容直接上传到 S3,则会导致图像损坏,我认为这是由于多部分响应中存在其他内容,例如 - Content-Disposition...

我想做的是,解析附加的多部分内容,例如 Content-Type 标头和多部分边界等,以便我只获得图像二进制文件。

Bou*_*Dev 3

要提取二进制内容,我们需要删除/解析它的标头和边界部分。有一个库 - parse-multipart可以很容易地做到这一点。

例子 -

假设请求头包含一个content-type标头。

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

    }
Run Code Online (Sandbox Code Playgroud)