2

我是 Node.js 世界的新手,有点陷入困境。

以下代码供参考:

    var http = require('http');
    var step = require('step');
    var request = require('request');

            exports.readimage2 = function(req, res){

        //res.send(200,'OK');

        //var image_url = 'http://www.letsgodigital.org/images/artikelen/39/k20d-image.jpg'; //--- 10mb
        //var image_url = 'http://upload.wikimedia.org/wikipedia/commons/2/2d/Snake_River_(5mb).jpg'; 
        //var image_url = 'http://www.sandia.gov/images2005/f4_image1.jpg';  //--- 2mb
        var image_url = 'http://www.fas.org/nuke/guide/pakistan/pakistan.gif'; // --- some KB

        http.get(image_url,
                function(responseData) {
                    var data = new Buffer(parseInt(responseData.headers['content-length'],10));
                    var pos = 0;

                    responseData.on('data', function(chunk) {
                      chunk.copy(data, pos);
                      pos += chunk.length;
                    });

                    responseData.on('end', function () {
                        res.send(200, data);
                    }); 
                });

    };

如果我将上面的代码与 step 模块一起使用,则上面的代码无法处理大文件。

任何人都建议如何正确使用 step。

4

1 回答 1

0

在这里我是如何使用步骤的.....虽然请求模块对图像缓冲区下载做了同样的事情,这要归功于stackoverflow上的一篇文章,只需要在请求中将编码设置为null即可为缓冲区响应工作。

var canvas = new Canvas(3000, 3000),
        ctx = canvas.getContext('2d'),
        Image = Canvas.Image;

    var image_url = "http://www.a2hosting.com/images/uploads/landing_images/node.js-hosting.png";
    //var image_url = 'http://upload.wikimedia.org/wikipedia/commons/1/16/AsterNovi-belgii-flower-1mb.jpg';


    step(

    function() {
        request.get({
            url: image_url,
            encoding: null
        }, this);
    },

    function(err, response, body) {

        var img = new Image;
        img.src = body;
        ctx.drawImage(img, 0, 0, img.width, img.height);

        //res.send(200, data);
        res.send(200, '<img src="' + canvas.toDataURL() + '" />');

    }

    );

以下是适用于 node 的简单 http 模块的代码。

var http = require('http');
 var step = require('step');
 var request = require('request');

 exports.imagedownload = function(req, res){
    step(
            function(){
                console.log('*********** image download start ***********');
                fndownload(this);
            },
            function(err, result){
                if(err) {

                }
                console.log('*********** image download end ***********');
                res.send(200, result);
            }
    ); 
 };

 function fndownload(callback) {

     var image_url = 'http://upload.wikimedia.org/wikipedia/commons/2/2d/Snake_River_(5mb).jpg'; // --- some KB

     http.get(image_url,
             function(responseData) {
                 var data = new Buffer(parseInt(responseData.headers['content-length'],10));
                 var pos = 0;

                 responseData.on('data', function(chunk) {
                   chunk.copy(data, pos);
                   pos += chunk.length;
                 });

                 responseData.on('end', function () {
                     //res.send(200, data);
                     callback(null, data);
                 }); 
             });
 };
于 2013-08-28T10:53:16.830 回答