从另一个域获取图像并按节点js编码base64

use*_*931 2 base64 encode node.js

我想从url获取图像并通过nodejs对base64进行编码,然后通过base64编码显示该图像,但此代码不正确.此代码保存不正确的png文件.

var http = require('http')
  , fs = require('fs')
  , options

options = {
    host: 'google.com'
  , port: 80
  , path: '/images/srpr/logo3w.png'
}

function base64_encode(bitmap) {  
    return new Buffer(bitmap).toString('base64');
}

function ImageReady(res2){
    var request = http.get(options, function(res){
        var imagedata = '';
        res.setEncoding('binary');

        res.on('data', function(chunk){
            imagedata += chunk;
        })

        res.on('end', function(){
            var base64encode = base64_encode(imagedata);
            res2.end('<img src="data:image/png;base64,'+base64encode+'" />');
            fs.writeFile('logo.png', imagedata, 'binary', function(err){
            if (err) throw err
            console.log('File saved.')
        })
        })

    })
}

var httpListen = require('http');
httpListen.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    ImageReady(res);
}).listen(8080);
console.log('Server running!');
Run Code Online (Sandbox Code Playgroud)

Dmi*_*try 11

试试这个:

var loadBase64Image = function (url, callback) {
    // Required 'request' module
    var request = require('request');

    // Make request to our image url
    request({url: url, encoding: null}, function (err, res, body) {
        if (!err && res.statusCode == 200) {
            // So as encoding set to null then request body became Buffer object
            var base64prefix = 'data:' + res.headers['content-type'] + ';base64,'
                , image = body.toString('base64');
            if (typeof callback == 'function') {
                callback(image, base64prefix);
            }
        } else {
            throw new Error('Can not download image');
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

在node.js应用程序中的某处使用:

// ...
loadBase64Image('http://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Carcharhinus_falciformis_off_Cuba.jpg/180px-Carcharhinus_falciformis_off_Cuba.jpg', function (image, prefix) {
    res.send('<img src="' + prefix + image + '"') />;
});
// ...
Run Code Online (Sandbox Code Playgroud)

  • 处理下载二进制数据时,"encoding:null"是最有价值的部分 (7认同)
  • 看起来你可以做{encoding:'base64'}并且它也可以工作,从而不必通过body.toString('base64')转换它. (6认同)