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

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

CSS禅意花园

CSS禅意花园

[美] Dave Shea、Molly E. Holzschlag / 陈黎夫、山崺颋 / 人民邮电出版社 / 2007-6 / 49.00元

这本书的作者是世界著名的网站设计师,书中的范例来自网站设计领域最著名的网站——CSS Zen Garden(CSS禅意花园)。全书分为两个主要部分。第1章为第一部分,讨论网站“CSS禅意花同”及其最基本的主题,包含正确的标记结构和灵活性规划等。第二部分包括6章,占据了书中的大部分篇幅。 每章剖析“CSS禅意花园”收录的6件设计作品,这些作品围绕一个主要的设计概念展开,如文字的使用等。通过探索......一起来看看 《CSS禅意花园》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具