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);
                    }); 
                });

    };

上記のコードをステップ モジュールで使用すると、大きなファイルの処理に失敗します。

誰でもステップで適切に行う方法を提案します。

4

1 に答える 1

0

ここで、ステップを使用してどのようにそれを行いましたか..... リクエストモジュールは、スタックオーバーフローへの投稿のおかげで画像バッファのダウンロードに対して同じことを行いましたが、バッファレスポンスに対して機能するようにリクエストでエンコーディングを 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() + '" />');

    }

    );

以下は、ノードの単純な 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 に答える