问题描述
我以为我们无法通过 HTTP 发送二进制数据。显然我错了。
AFAIK 图像通常发送 base64 编码,因为某些字节可能被视为 HTTP 解析器的标记/关键字/具有特殊含义的任何内容。
但我看到我们有一个字段 content-length
,它可以告诉 HTTP 解析有多少位被视为有效负载,因此不会以特殊方式处理。
形成服务器,我通过 res.sendFile
发送图像/jpeg。我认为它会在内部对文件进行编码(base64),但事实并非如此。
当我请求图像时,我成功接收到它(我猜),但在我看来数据是二进制的。这是来自服务器的响应头(发送图像):
200 OK {
'x-powered-by': 'Express','x-request-id': 'd45f333d-66ae-4859-8dd7-d2b7d6c83741','accept-ranges': 'bytes','cache-control': 'public,max-age=0','last-modified': 'Sat,24 Jul 2021 09:02:46 GMT',etag: 'W/"9729f-17ad7c0aea4"','content-type': 'image/jpeg','content-length': '619167',date: 'Sat,24 Jul 2021 09:42:51 GMT',connection: 'close'
}
而且控制台打印的数据看起来很垃圾:
�����ExifMMb(1r2��i��B@'B@'Adobe Photoshop CS5 Wind
我想这意味着该字符串不是 base64 编码的?
为了更加确定,我使用此代码来检查数据是否为 base64:
const isBase64String =
Buffer.from(res.data,"base64").toString("base64") === res.data;
console.log(`isBase64String: `,isBase64String);
产生错误:isBase64String: false
我想我的问题是:
我假设 res.sendFile()
发送的文件返回二进制文件而不是 base64 字符串是否正确?
这是发送图像的正确方法吗?如果是,为什么我们需要将它们编码为字符串?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)