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

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

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


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

查看所有标签

猜你喜欢:

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

Clojure编程

Clojure编程

Chas Emerick、Brian Carper、Christophe Grand / 徐明明、杨寿勋 / 电子工业出版社 / 2013-3-26 / 99.00元

Clojure是一种实用的通用语言,它是传奇语言LISP的方言,可与Ruby、Python等动态语言相媲美,更以无缝Java库、服务,以及拥有JVM系统得天独厚的资源优势而胜出。本书既可以用来熟悉Clojure基础知识与常见例子,也可了解其相关的实践领域与话题,更可以看到这一JVM平台上的LISP如何帮助消除不必要的复杂性,为大家在编程实践中解决最具挑战性的问题开辟新的选择——更具灵活性,更适于W......一起来看看 《Clojure编程》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具