node.jsを使用して大きな画像(〜2MB以上)をダウンロードする方法を探しています。私はすべての種類のソリューションを試して高低を検索しました。画像がダウンロードされても、一部は一貫して壊れています。Node.jsダウンロードした画像が破損しました
たとえば、次のコードを使用してこのサンプルイメージをダウンロードしても、イメージは半分しかダウンロードされません。
var http = require('http')
var fs = require('fs')
var options = {
host:'images.clipartpanda.com',
port:80,
path:'http://images.clipartpanda.com/writing-clip-art-xTgn7KXTA.jpeg'
};
var downloadImage = function (options, fileName) {
http.get(options, function (res) {
var imageData = '';
res.setEncoding('binary');
res.on('data', function (chunk) {
imageData += chunk;
});
res.on('end', function() {
fs.writeFile(fileName, imageData, 'binary', function(err){
if(err) throw err;
console.log('File: ' + fileName + " written!");
})
});
});
};
downloadImage(options,'writing-clip-art-xTgn7KXTA.jpeg');
私はNode.jsのv4.2.6でのUbuntu v16.04仮想マシンを使用しています私もNPMの画像ダウンローダを使用してみましたが、私は同じ結果
にvar image_downloader = require('image-downloader');
var options = {
url: 'http://images.clipartpanda.com/writing-clip-art-xTgn7KXTA.jpeg',
dest: '/home',
done: function (err, filename, image) {
if (err) {
console.log(err);
} else {
console.log('File saved to', filename);
}
},
};
image_downloader(options);
を取得しています。
-UPDATE-
は答え以下&コメント(今createWriteStreamを使用)ごとに次のコードを使用してみましたが、ファイルがまだダウンロード時に破損しています。
var http = require('http')
var fs = require('fs')
var options = {
host:'images.clipartpanda.com',
port:80,
path:'http://images.clipartpanda.com/writing-clip-art-xTgn7KXTA.jpeg'
};
var fileName = 'writing-clip-art-xTgn7KXTA.jpeg';
http.get(options, function (res) {
var stream = fs.createWriteStream(fileName);
res.pipe(stream);
});
すべての今して、私はまた、このようなエラーが表示されます。
Command: node "/home/test.js"
events.js:141
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at exports._errnoException (util.js:870:11)
at TCP.onread (net.js:544:26)
Program exited with code 1
- UPDATE 2 -
この問題を解決するために数え切れないほどの時間のために検索した後、私は」だと思いますそれを理解しました。真を使用するために必要な:ソケット接続が死んで、キープアライブを保っているようだ
request({url: options.url, encoding: null, forever:true}, function (err, response, body) {
21行に画像download.jsファイル内のリクエストに:私は{真の永遠}追加する必要がありました。
イメージデータをすべて作成して書き込むのではなく、データを受け取ったときにファイルに書き込んだことがありますか? –
更新されたコードは私のために働きます。ダウンロードしたファイルは106045バイトにする必要があります。あなたはそれを見ていますか? – tcooc
@tcooc時々私は〜60KB、時には〜53KB、時には "ECONNRESET"となっています。私は完全なファイルをまだダウンロードできませんでした。私のnode.jsの設定に、私が見なければならないものがありますか? –