使用节点v0.2.0我试图从服务器获取图像,将其转换为base64字符串,然后将其嵌入到图像标记的页面中。我有以下代码:Node.js base64编码下载的图像以用于数据URI
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,但如果情况如此,我应该如何转换?
谢谢,这是行得通的,但我不太喜欢编辑请求包让它工作的想法。如何实现一个可写的流对象?我无法弄清楚如何创建一个。任何帮助将非常感激! – betamax 2010-09-16 10:55:37
在http://github.com/substack/node-bufferlist找到了一个很好的可写流实现。以下是不需要修改请求库的代码的更新版本:http://gist.github.com/583836。 – bxjx 2010-09-17 06:54:57
适合你吗? – bxjx 2010-09-22 04:24:48