当前位置: 首页 > 面试题库 >

Node.js base64对下载的图像进行编码以用于数据URI

慕容俭
2023-03-14
问题内容

使用Node v0.2.0,我试图从服务器获取图像,将其转换为base64字符串,然后将其嵌入图像标签中的页面上。我有以下代码:

var express = require('express'),
request = require('request'),
sys = require('sys');

var app = express.createServer(
    express.logger(),
    express.bodyDecoder()
);

app.get('/', function(req, res){

    if(req.param("url")) {
        var url = unescape(req.param("url"));
        request({uri:url}, function (error, response, body) {
          if (!error && response.statusCode == 200) {

                var data_uri_prefix = "data:" + response.headers["content-type"] + ";base64,";
                var buf = new Buffer(body);
                var image = buf.toString('base64');

                image = data_uri_prefix + image;

                res.send('<img src="'+image+'"/>');

          }
        });
    }
});

app.listen(3000);

注意:此代码需要“ 表达 ”和“ 请求 ”。当然是node。如果已安装npm,则它应该像“
npm install express”或“ npm install request”一样简单。

不幸的是,这不能按预期工作。如果我使用Google徽标进行转换,则在字符串的开头会得到以下内容:

77 + 9UE5HDQoaCgAAAA1JSERSAAABEwAAAF8IAwAAAO + / ve + / ve + /
vSkAAAMAUExURQBzCw5xGiNmK0t + U ++ / vQUf77 + 9BiHvv70WKO + / vQkk77 + 9D

但是,如果我使用具有相同图像的在线Base64编码器,则它可以完美工作。字符串开始如下:

iVBORw0KGgoAAAANSUhEUgAAARMAAABfCAMAAAD8mtMpAAADAFBMVEUAcwsOcRojZitLflOWBR +
aBiGQFiipCSS8DCm1Cya1FiyNKzexKTjDDSrLDS

我在哪里错,这不能正常工作?我尝试了许多不同的js
base64实现,但它们都不能以相同的方式工作。我唯一能想到的是我正在尝试将错误的内容转换为base64,但是如果是这种情况,我应该怎么转换?


问题答案:

问题是在JavaScript字符串中编码和存储二进制数据。http://nodejs.org/api.html的“缓冲区”下有一个很好的章节。

不幸的是,解决此问题的最简单方法是更改​​请求npm。我必须response.setEncoding('binary');在下面var buffer;的/path/to/lib/node/.npm/request/active/package/lib/main.js中的第66行添加。这将对此请求正常运行,但对其他请求则无效。您可能想要修改它,以便仅基于其他通过的选项进行设置。

然后var buf = new Buffer(body),我更改为var buf = new Buffer(body, 'binary');。之后,一切正常。

如果您确实不想触摸请求npm,则另一种方法是在responseBodyStream参数中传入一个实现Writable
Stream的对象来请求。然后,该对象会将来自响应的流数据存储在其自己的缓冲区中。也许有一个已经在执行此操作的库…我不确定。

我现在将其保留在此处,但是如果您想让我澄清任何事情,请随时发表评论。

编辑

查看评论。
http://gist.github.com/583836的新解决方案



 类似资料:
  • 我有一个来自服务器的bas64编码图像,我想通过JavaScript强制下载。有可能吗?

  • 这是我为从url下载图像而编写的代码,但使用java.io.FileNotFoundException重新引用响应代码400

  • 问题内容: 虽然此答案适用于从Jar文件中加载图像,但似乎无法为SwingHTML中引用的图像找到正确的路径。 当资源未捆绑到jar中时,这将在Swing HTML中显示图像: 在jar内部,可以将图像成功引用(并显示)到: 但是,我尝试将技术用于Swing HTML无效。 有什么秘密? 问题答案: 如果没有实际尝试,我认为如果在HTML代码中包含资源URL,则HTML渲染器可以访问您的图像:

  • 问题内容: 我想对64个PNG文件进行base-64编码,以将其包含在样式表的data:url中。我怎样才能做到这一点? 我在Mac上,因此Unix命令行上的某些功能会很好用。基于Python的解决方案也很出色。 问题答案: 这应该在Python中完成:

  • 我正在努力理解的行为。我想用它来编码查询参数中的URL,但它似乎只转义字符,而不转义其他必要的字符,如。 查询参数中根本没有编码的URL示例: 输出: 这是不正确的,因为未编码的会导致被解释为而不是的查询参数。 但是,如果使用包含字符的输入:: 输出: 字符被转义。 自动转义字符,但不转义其他保留字符,这似乎不一致。 使用将URL编码为查询参数的正确过程是什么?

  • 我正在开发一个使用C作为练习的小型交易机器人。他将首先收到基本信息,如我们的资本和日常股票价值(表示为迭代)。 这是我的专业课: 从最后两个属性可以看出,我使用指数移动平均原理和趋势跟踪算法。 我从报纸上读到过http://www.cis.umac.mo/~fstasp/paper/jetwi2011。pdf(主要在第3页)并希望实现他们与我们共享的伪代码;它是这样的: 到目前为止,我是这样做的: