2016-05-30 88 views
0

我已經在Node中編寫了一個小功能,用於從服務器下載圖像並將其保存在服務器上,但它不起作用。圖像文件被創建,但它似乎是損壞的,這裏的功能:下載圖片無效:NodeJS

function d() { 
    var data = [ 
     { 
      img: "http://wow.zamimg.com/images/hearthstone/cards/enus/original/OG_134.png", 
      cardId: "yogg" 
     }, 
     { 
      img: "http://wow.zamimg.com/images/hearthstone/cards/enus/original/HERO_07.png", 
      cardId: "nzoth" 
     } 
    ]; 
    for(var card of data) { 
     if("img" in card) { 
      var img = require('fs').createWriteStream("./public/assets/pics/" + card.cardId + ".png"); 
      require("http").get(card.img, (res) => { 
       res.pipe(img); 
      }); 
     } 
    } 
} 

我做錯了什麼?

回答

1

問題是您的進程在下載完成之前退出。 http.get函數並行運行,所以你需要以某種方式處理它。你可以使用async模塊來做到這一點。

function d() { 
var data = [ 
    { 
     img: "http://wow.zamimg.com/images/hearthstone/cards/enus/original/OG_134.png", 
     cardId: "yogg" 
    }, 
    { 
     img: "http://wow.zamimg.com/images/hearthstone/cards/enus/original/HERO_07.png", 
     cardId: "nzoth" 
    } 
]; 
var async = require('async') 
async.each(data, (card, next) => { 
    if("img" in card) { 
     var img = require('fs').createWriteStream(card.cardId + ".png"); 
      require("http").get(card.img, (res) => { 
       res.pipe(img).on('end', next) 
      }); 
    } 
} 
,() => { 
    console.log(done) 
}) 
} 
+0

謝謝!完美的作品。 –

1

使用此:

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

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

download('https://www.THE_URL.com/image.png', 'THE_NAME.png', function(){ 
    console.log('Image saved!'); 
});