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');
I도하지만 동일한 결과
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);
내가 Node.js를의 v4.2.6로 우분투 v16.04 가상 머신을 사용하고 받고 있어요 NPM의 이미지 다운 로더를 사용하여 시도했다 .
-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
- 업데이트 2 -이 문제를 해결하기 위해 많은 시간을 검색 한 후
, 나는 내가 '생각 그것을 알아 냈다. 사실 사용하기 위해 필요한 : 소켓 연결이 죽어 킵 얼라이브 유지 것으로 보인다 라인 (21)
request({url: options.url, encoding: null, forever:true}, function (err, response, body) {
에 이미지 download.js 파일의 요청 : {사실 영원히} 나는 추가했다.
이미지 데이터를 모두 작성하고 쓰는 대신 데이터 수신시 파일에 쓰려고 했습니까? –
업데이트 된 코드가 유용합니다. 다운로드 한 파일은 106045 바이트 여야합니다. 너 그거 보니? – tcooc
@tcooc 때로는 ~ 60KB, 가끔 ~ 53KB, 때로는 "ECONNRESET"이 나옵니다. 아직 전체 파일을 다운로드 할 수 없었습니다. 내 node.js 설정에 내가보고 있어야하는 것이 있습니까? –