下载文件,保存并再次阅读 - >错误

Kno*_*ob1 1 node.js

我想下载一个文件,将其写入临时文件,读取它并将readFileSync Buffer提供给一个函数.我试过这个:

var file = fs.createWriteStream("temp.pdf")
var request = http.get(linkArray[1], function(response) {
    response.on('data', function(data){
         file.write(data)
    }).on('end', function(){
         postData(fs.readFileSync('temp.pdf'))
    })
});
Run Code Online (Sandbox Code Playgroud)

有时它可以工作,但有时却不行 - 我的猜测是文件在读取时没有完全写入.(但是'结束'事件不应该被解雇?!正如你所看到的,我想下载一堆文件并执行此操作.你有任何建议如何解决这个问题吗?也许这不是最好的解决这个问题的方法......

gen*_*nry 5

您不on('data' 应该使用管道链接流.Pipe会将流数据事件链接到写入,并将结束事件链接到结尾.

var file = fs.createWriteStream("temp.pdf");
var request = http.get(linkArray[1], function(response) {
    response.pipe(file).on('close', function(){
         postData(fs.readFileSync('temp.pdf'));
    });
});
Run Code Online (Sandbox Code Playgroud)

你也应该使用https://github.com/mikeal/request

var request = require('request');

request.get(linkArray[i], function (err, response, body) {
  postData(body);
});
Run Code Online (Sandbox Code Playgroud)

要么

var request = require('request');
var file = fs.createWriteStream("temp.pdf");

request.get(linkArray[i]).pipe(file).on('close', function () {
    postData(fs.readFileSync('temp.pdf'));   
});
Run Code Online (Sandbox Code Playgroud)