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 (将#修改为@)