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

我想下载一个文件,把它写到一个临时文件中,读取它并给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')) }) }); 

有时候它是有效的,但有时却不行 – 我的猜测是,当文件被读取时,文件没有被完全写入。 (但是,比'结束'事件不应该被解雇?!正如你可以看到,我想下载一堆文件,并做到这一点。你有任何build议如何解决这个问题?也许这不是最好的方法来解决这个…

你不应该用stream来连接streamon('data'你应该使用pipe。Pipe将stream数据事件连接到写入和结束事件。

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

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

 var request = require('request'); request.get(linkArray[i], function (err, response, body) { postData(body); }); 

要么

 var request = require('request'); var file = fs.createWriteStream("temp.pdf"); request.get(linkArray[i]).pipe(file).on('close', function () { postData(fs.readFileSync('temp.pdf')); }); 

你需要调用file.end();.on('end', ...)处理程序的顶部。 end()方法本身是asynchronous的,所以你需要在完成之后读取文件。 例如,

 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(){ file.end(function() { postData(fs.readFileSync('temp.pdf')) }); }) });