node.js - 使用 Node.js 以 JSON 格式发送 PDF 文件时使用什么数组格式
问题描述
我们正在使用 Express.js 开发 Node.js API。我们的一个函数接收一些 ID。我们获取该 ID 并在 json 响应中返回一个 pdf 文件(存储在 AWS 上),如下所示:
{
ID: "id10",
pdf: [21, 23, 34, 46, ...]
}
我们面临的问题是我们不确定应该将该 pdf 转换成什么格式。我们应该将其转换为 Base64 字符串、Uint8 数组、二进制数组还是其他?
pdf 文件大小永远不会超过 200kb,因此响应大小和响应时间应该不是问题。
解决方案
这些格式中的任何一种都可以工作,我见过使用数组和 base64 编码的 API。您也可以使用十六进制编码,base58 任何其他。
虽然您不关心大小,但我会注意到编码为 JSON 的数组将使用大约 2.7 倍于 base64 编码的数据量。将其乘以数千个请求,您就会有更多的数据通过网络传输。
任何现代客户端都应该能够解码任何这些格式。我认为 base64 编码不会比使用数组困难得多,但它会更节省资源。
你可以很容易地证明这一点:
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 │ └──────────┴────────┘
推荐阅读
- python - 用于检查“a”(区分大小写)是否出现两次以上的 Python 条件
- stock - 售后库存表数量如何处理
- r - ggplot 在闪亮的 eventReactive() 中无法正常工作
- algorithm - 使用一组给定数字生成最多固定数字的增量数字的算法
- firebase - 如何删除集合中的特定文档并使用firebase firestore flutter的自动生成ID?
- python - 运行我的不和谐机器人显示“[RecursionError] 超出最大递归深度”
- android - MutableState 变量在 Beta02 中后续单击 Jetpack Compose Checkbox 时无法再次更改,但适用于 Beta01
- python-3.x - TypeError: ('Keyword argument not understand:', 'input') for CNN with pretrained model from VGG16
- javascript - 如何在反应传单中使用带有动态标记的边界
- spring-aop - 静态分析工具捕获绕过Spring缓存@Cacheable方法的自调用