【问题标题】:NiodeJS/ How to find size of an externally hosted image without downloading it?NodeJS /如何在不下载外部托管图像的情况下找到它的大小?
【发布时间】:2021-06-14 23:30:47
【问题描述】:

我需要在文档中查找外部托管图像的大小/元数据(例如,其中包含图像标签的降价文档),但需要在不实际下载图像的情况下执行此操作。

有没有什么方法可以在 NodeJS/ExpressJs 上使用 javascript 轻松做到这一点?有些解决方案已有多年历史,不确定现在是否有更好的方法。

【问题讨论】:

  • 将内容编码为base64然后计算二进制大小?我不是 nodeJs 的粉丝,但也许你对我在说什么有点了解?
  • @AdnaneAr 我不想将图像下载到我的服务器上——这就是问题所在。我只想“检查”它的元数据并找到它的大小。
  • 也许试试 HEAD http 方法?
  • 为什么要使用快递?您是否在托管并想要公开图像的大小?或获取但只想要大小,而不是整个文件?
  • @MatthewBakaitis 这是一个网络应用程序,它执行一些操作,包括用户上传降价文件和在服务器上生成文档。但在生成之前,我需要检查任何外部引用图像的大小,如果它们超过某些限制,则操作会失败。

标签: javascript node.js ecmascript-6 axios


【解决方案1】:

您可以执行 cmets 中建议的操作,只需在调用图像时抓取 HEAD 而不是使用 GET

使用got 或您喜欢的任何内容(http、axios 等)将method 设置为HEAD 并查找content-length

我的示例程序抓取 twitter favicon,仅标题,如下所示:

const got = require('got');
(async () => {
  try {
    const response = await got('https://abs.twimg.com/favicons/twitter.ico', { method: 'HEAD' });
    console.log(response.headers);
  } catch (error) {
    console.log('something is broken. that would be a new and different question.');
  }
})();

在回复中我看到了我需要的行:

  'content-length': '912'

如果服务器不尊重 HEAD 或不返回 content-length 标头,您可能不走运。

【讨论】:

  • 谢谢,正是我想要的。
猜你喜欢
  • 2011-11-19
  • 2011-08-26
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多