【问题标题】:What array format to use when sending PDF file in JSON using Node.js使用 Node.js 以 JSON 格式发送 PDF 文件时使用什么数组格式
【发布时间】:2021-03-20 20:24:38
【问题描述】:

我们正在使用 Express.js 开发 Node.js API。我们的一个函数接收一些 ID。我们获取该 ID 并在 json 响应中返回一个 pdf 文件(存储在 AWS 上),如下所示:

{
    ID: "id10", 
    pdf: [21, 23, 34, 46, ...]
}

我们面临的问题是我们不确定应该将该 pdf 转换成什么格式。我们应该转换成 Base64 字符串、Uint8 数组、二进制数组还是别的什么?

pdf 文件大小永远不会超过 200kb,因此响应大小和响应时间应该不是问题。

【问题讨论】:

    标签: node.js arrays json express uint8array


    【解决方案1】:

    这些格式中的任何一种都可以工作,我见过使用数组和 base64 编码的 API。您也可以使用十六进制编码,base58 任何其他。

    虽然您不关心大小,但我会注意到,编码为 JSON 的数组使用的数据量大约是 base64 编码的 2.7 倍。将其乘以数千个请求,您就会有更多的数据通过网络传输。

    任何现代客户端都应该能够解码这些格式中的任何一种。我认为 base64 编码不会比使用 Array 更困难,但它会更节省资源。

    你可以很容易地证明这一点:

    function getRandomBuffer(length) {
        return Buffer.from(Array.from( { length }, (v,k) => Math.floor(Math.random()*256)))
    }
    
    function getJSONLength(obj) {
        return JSON.stringify(obj).length;
    }
    
    const buf = getRandomBuffer(200 * 1024);
    
    const jsonLengths = { 
        Array: getJSONLength({ pdf: [...buf] }),
        Hex: getJSONLength({ pdf: buf.toString("hex")}),
        Base64: getJSONLength({ pdf: buf.toString("base64") })
    }
    
    console.table(jsonLengths);
    
    200kb 的 JSON 数据大小(以字节为单位): ┌──────────┬────────┐ │(索引)│价值观│ ├──────────┼────────┤ │ 阵列 │ 731143 │ │ 十六进制 │ 409610 │ │ Base64 │ 273078 │ └──────────┴────────┘

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 2016-10-17
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多