微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Express 服务器 - 通过 res.sendFile() 发送的图像不是 base64 编码的吗?应该是吗?

如何解决Express 服务器 - 通过 res.sendFile() 发送的图像不是 base64 编码的吗?应该是吗?

我以为我们无法通过 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 举报,一经查实,本站将立刻删除。