创建写入流时下载不完整

时间:2017-02-20 05:29:57

标签: node.js filesystems

我有一个回调功能,以确保图像下载完成。

如果我要下载多个图像(大约11个),它会下载所有图像,但文件大小不正确。因此有些被破坏了。

我认为使用回调将确保在继续之前完成下载。

这是我正在使用的代码:

    imageExtractor(imageId,function(){
    zipmaker(imageId, function () {

       });
    });

 imageIndex =0;
 function imageExtractor(imageId, callback) {
  images.ImageIds.foreach(function (image){
   imageIndex++;


  // Here I call the download image function

 downloadImageFromURLAndSave(imageURL, imageId, category,callback) {
  if(images.length=seriesIndex){
  callback();
     }
 } 

}

function downloadImageFromURLAndSave(imageURL, imageId, category,callback) {
console.log("Download has started.");
console.log(imageURL);
request
    .get(imageURL)
    .pipe(fs.createWriteStream(__dirname + category+
     '/digital/' + imageId)
        .on('finish', function() {
        console.log("Download has finished for " + imageId+ " Congratulations.");
        callback();
    }));

}

看起来这个(zipmaker)之后的函数在下载图像之前就被调用了,即使我有一个回调你可以看到。

1 个答案:

答案 0 :(得分:0)

如果我在哪里,请按照以下方式构建代码:

index.js:

var fs = require('fs'),
    request = require('request');
var config = require('./test.json');
var download = function(uri, filename, callback){
  request.head(uri, function(err, res, body){
    console.log('content-type:', res.headers['content-type']);
    console.log('content-length:', res.headers['content-length']);

    request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
  });
};

for (var key in config) {
  if (config.hasOwnProperty(key)) {
    download(key, config[key], function(){
      console.log('done');
    });
  }
}

test.json:

{
  "https://www.google.com/images/srpr/logo3w.png": "google.png",
  "http://www.jqueryscript.net/images/Simplest-Responsive-jQuery-Image-Lightbox-Plugin-simple-lightbox.jpg": "panda.jpg"
}

希望这有帮助!