无法使用nodejs从文本文件下载图像

时间:2017-08-02 14:43:01

标签: node.js

我有一个名为'images.txt'的文件,其中包含此类图片的网址

http://www.foobar.com/assets/foobar/abc.jpg                                                
http://www.foobar.com/assets/foobar/xyz.jpg                                          
http://www.foobar.com/assets/foobar/aaa.jpg                                     
http://www.foobar.com/assets/foobar/bbb.jpg                    
http://www.foobar.com/assets/foobar/rrr.jpg     

我正在尝试遍历文件并逐个下载图像,但出于某种原因,我只能下载最后一个图像rrr.jpg,它只有0kb ..这是不正确的。

我使用的是以下nodejs代码。

var wget = require('node-wget'); fs = require('fs')

fs.readFile(__dirname + '\\images.txt', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }else{
    wget(data);
  }
});

我安装了nodejs和wget,并且没有任何问题。

更新

我使用过这个脚本

var lineReader = require('readline').createInterface({
  input: require('fs').createReadStream(__dirname + '\\images.txt')
});

lineReader.on('line', function (line) {
 wget(line);
});

它会下载所有图像,但它们似乎已损坏,因为无法打开或删除所有图像。即使nodejs完成了脚本运行,似乎有一些东西从nodejs打开但没有关闭

1 个答案:

答案 0 :(得分:1)

看起来你没有逐行读取文件。试试这个实验:

// check.js
const fs = require('fs')

fs.readFile(__dirname + '/check.js', 'utf8', function(err, data) {
  if (err) {
    return console.warn(err)
  } else {
    console.log(`next line: ${data}`)
    // wget(data);
  }
})

(因为看起来你正在使用Windows,所以转过斜线)

你只会看到下一行'一次。

(我用脚本名称替换了文件名,我将其命名为check.js。您必须将check.js替换为脚本名称或图像列表名称。)

---重新更新---

也许这会奏效:

// check.js
const fs = require('fs')

fs.readFile(__dirname + '/check.js', 'utf8', function(err, data) {
  if (err) {
    return console.warn(err)
  } else {
    for (let line of data.split('\n')) { // might have to change to \r\n or something for windows
      console.log(`next line: ${line}`)
      // wget(data);
    }

  }
})

wget可能不喜欢你在前一个下载之前开始第二次下载