javascript – Node.js base64对下载的图像进行编码,以便在数据URI中使用

栏目: Node.js · 发布时间: 5年前

内容简介:http://stackoverflow.com/questions/3709391/node-js-base64-encode-a-downloaded-image-for-use-in-data-uri

使用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);

注意:此代码需要“ express ”和“ request ”.当然, node .如果你安装了npm,它应该是“npm install express”或“npm install request”一样简单.

不幸的是,这不按预期工作.如果我用 Google logo 进行转换,那么我在字符串的开始处得到以下内容:

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

但是,如果我使用相同图像的在线 Base64 encoder ,那么它的工作原理很好.字符串开始如下:

iVBORw0KGgoAAAANSUhEUgAAARMAAABfCAMAAAD8mtMpAAADAFBMVEUAcwsOcRojZitLflOWBR+aBiGQFiipCSS8DCm1Cya1FiyNKzexKTjDDSrLDS

我在哪里错了,这不正常?我尝试过这么多不同的js base64实现,并且它们都不能以同样的方式工作.我唯一可以想到的是,我试图将错误的东西转换成base64,但是如果是这样的话,应该怎么转换?

问题是在JavaScript字符串中编码和存储二进制数据.在 http://nodejs.org/api.html

的Buffers下面有一个很好的部分.

不幸的是,解决这个问题的最简单的方法是改变请求npm.我不得不添加response.setEncoding(‘binary’);在线缓冲区下方的66行;在/path/to/lib/node/.npm/request/active/package/lib/main.js中.这可以适用于此请求,但不适用于其他请求.你可能想要破解它,以便这只是基于一些其他传递的选项设置.

然后我将var buf = new Buffer(body)改为var buf = new Buffer(body,’binary’);.之后,一切都很好.

另一种方法,如果你真的不想触摸请求npm,将传入一个在ResponseBodyStream参数中实现Writable Stream的对象来请求.然后,该对象将将来自响应的流数据存储在它自己的缓冲区中.也许有一个图书馆已经这样做了…我不知道.

我现在要离开这里,但如果你想让我澄清一下,可以随意评论.

编辑

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

http://stackoverflow.com/questions/3709391/node-js-base64-encode-a-downloaded-image-for-use-in-data-uri


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

About Face 3

About Face 3

Alan Cooper、Robert Reimann、David Cronin / John Wiley & Sons / 2007-5-15 / GBP 28.99

* The return of the authoritative bestseller includes all new content relevant to the popularization of how About Face maintains its relevance to new Web technologies such as AJAX and mobile platforms......一起来看看 《About Face 3》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具