2017-10-06 19 views
1

ng-file-uploadディレクティブを使用して、角形アプリケーションからサーバーに画像を送信しています。ここに私のコードです:チャンクされた画像ファイルの問題をアップロードする

Upload.upload({ 
    url: 'http://localhost:5000/upload', 
    data: { file: blobFile }, 
    resumeChunkSize: 10000, 
}).then(function (resp) { //upload function returns a promise 
    console.log('resp: ', resp); 
}); 

イメージは塊で転送されています。しかし、今、私はここで打たれました。私はこれらのチャンクを受信し、完全なイメージを作成するためにマージする方法を知らない。次のように私のサーバーのコードは次のとおりです。

handler: function (req, res) { 
    var size = 0; 

    req.on('data', function (data) { 
     size += data.length; 
     console.log('Got chunk: ' + data.length + ' total: ' + size); 
    }); 

    req.on('end', function() { 
     console.log("total size = " + size); 
     res.send("response"); 
    }); 

    req.on('error', function (e) { 
     console.log("ERROR ERROR: " + e.message); 
    }); 
    } 

たびに、私はチャンク要求、req.on('end', ...)トリガを受けます。私はここで混乱している初心者です。ここで

答えて

0

はい..チャンク画像をアップロードするのは簡単ではありません...

ソリューションは、私が使用します。

var request = require('request'); 
var fs = require('fs'); 

function uploadChunkedImage(url, callback){ 

    // request options 
    var options = { 
     url: url, // the url of the image 
     method: 'GET' 
    }; 

    // array of chunks 
    var chunks = []; 

    // request 
    request(options, function (err, res, body) { 
     console.log('END') 

     // body is corrupted, you can't use it for images... :-(
     // so, we will callback the concactened buffer of it instead 

     // concact chunk buffers 
     chunks = Buffer.concat(chunks); // image buffer that you can use 

     // callback the result 
     callback(err, res, chunks); 

    }).on('response', function (response) { 

     response.on('data', function (chunk) { 
      // collect chunk buffer 
      chunks.push(chunk); 
     }); 

    }); 
} 

uploadChunkedImage('http://localhost:5000/upload', function(err, res, buffer){ 
    if(!err){ 
     // save 
     fs.writeFile('./myDirPath/image.jpg', buffer); 
    }else{ 
     console.log(err); 
    } 

}); 

がでプロジェクトにrequestfsをインストールすることを忘れないでください

:NPM、 Bufferは、より多くの情報のためのネイティブ

npm install request --save 
npm install fs --save 

です

あなたはNG-ファイルのアップロードと同じトリックを行うことができ、good example right hereは他に、そこにある私は、(テストしていません)以下のようなものを試してみることをお勧め:

handler: function (req, res) { 

    // array of chunks 
    var chunks= []; 

    req.on('data', function (data) { 

     // collect 
     chunks.push(data); 
     console.log('Got chunk: ' + data.length); 

    }); 

    req.on('end', function() { 

     // concact 
     chunks = Buffer.concat(chunks); 
     console.log("Total size = " + chunks.length); 

     // res.send() is deprecated, use res.write instead 
     res.write(chunks,'binary'); 
     res.end(null, 'binary'); 

    }); 

    req.on('error', function (e) { 
     console.log("ERROR ERROR: " + e.message); 
    }); 
} 

希望すると助かります

関連する問題