【问题标题】:how can I transfer output raw images through Node.JS?如何通过 Node.JS 传输输出原始图像?
【发布时间】:2011-06-01 09:28:25
【问题描述】:

例如;我检查了请求 URL 是否为“/favicon.ico”。我想简单地输出该图像而不需要 fs。当然我需要相应地更改 content-type 标题,但是我应该如何在 JS 文件中插入实际图像,而不会出现解析错误?

我尝试了最简单的方法:在 txt 编辑器中打开图像,然后将内容粘贴到变量中。我认为将所有文件保存在内存中会很有效,因为它是一个简单的站点。

【问题讨论】:

    标签: javascript image memory node.js


    【解决方案1】:

    使用Buffer.from,因为Buffer已被弃用,会得到如下警告

    (node:15707) [DEP0005] DeprecationWarning:由于安全性和可用性问题,不推荐使用 Buffer()。请改用 Buffer.alloc()、Buffer.allocUnsafe() 或 Buffer.from() 方法。

    var image1 = Buffer.from(('iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVChTjVDJDQAgCGMuB2Iep3EZh0GEqiQekQ8htLSFmGKlXOW/yKCFicsvqeYE8IGsS5gBRk97dV9x2MjrruIsBdo09lCel03LteEFRt7kS3wlmZPRRQ6Zg3YHrxeMpzpAdw2MaCJX2CUsrAAAAABJRU5ErkJggg==', 'base64');
    response.writeHead(200, {
        'Content-Length': image1.length,
        'Content-Type': 'image/png'
    });
    response.end(image1);
    

    【讨论】:

      【解决方案2】:

      您可以使用data uri 将图像包含在您的源中。我对 Node.JS 的了解还不够,无法告诉您如何以编程方式进行操作,但由于您只是要将它们存储在变量中,因此将图像转换为数据 uris 并将它们存储在 vars 中应该很容易。大多数现代浏览器(和 IE8+)都支持数据 uri。如果您搜索“数据 uri 生成器”,您应该会在网上找到很多。

      我个人喜欢 Firefox 的 Base64 Encoder 扩展。这是一种在需要时制作数据 uri 图像的快捷方便的方法。

      更新

      经过更多研究,您也许可以存储一个 base64 编码的字符串,然后将其加载到 Buffer 并执行以下操作:

      var image1 = new Buffer('iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVChTjVDJDQAgCGMuB2Iep3EZh0GEqiQekQ8htLSFmGKlXOW/yKCFicsvqeYE8IGsS5gBRk97dV9x2MjrruIsBdo09lCel03LteEFRt7kS3wlmZPRRQ6Zg3YHrxeMpzpAdw2MaCJX2CUsrAAAAABJRU5ErkJggg==', 'base64');
      response.writeHead(200, {
          'Content-Length': image1.length,
          'Content-Type': 'image/png'
      });
      response.end(image1);
      

      看起来你甚至可以使用带有 Buffer 的“二进制”编码来处理复制粘贴的原始数据,但这种方法已被弃用,所以我会坚持使用更可靠的东西,比如 base64。

      【讨论】:

      • 实际上我已经考虑了数据 URI。没关系,除了 IE 根本不支持它们。我想支持它仍然很重要。
      • IE 8 及更高版本在很大程度上支持它们。如果您仍然需要支持 IE
      猜你喜欢
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 2014-11-22
      • 2013-05-26
      • 1970-01-01
      • 2013-10-17
      相关资源
      最近更新 更多