【问题标题】:How to extract/parse the binary content from a Multipart response in NodeJS?如何从 NodeJS 中的 Multipart 响应中提取/解析二进制内容?
【发布时间】:2020-01-18 06:02:36
【问题描述】:

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

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

编辑 -

为了让事情更清楚 -

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

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

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

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

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

我想做的是,解析额外的多部分内容,如 Content-Type 标头和多部分边界等,这样我就只能得到图像二进制文件。

【问题讨论】:

  • 这看起来像是一个名为 testImage.PNG 的文件的文件上传。是否要将文件存储在服务器的文件系统中?把它放在一个数组中?要不然是啥?请edit您的问题澄清您的要求。

标签: javascript node.js express multipartform-data multipart


【解决方案1】:

我为这个问题苦苦挣扎了很多天。解决方案是在 API GATE WAY > 配置 > 二进制类型添加multipart/form-data

【讨论】:

    【解决方案2】:

    要提取二进制内容,我们需要删除/解析它的标题和边界部分。有一个库 - 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
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多