我想下载一个文件,将其写入临时文件,读取它并将 readFileSync 缓冲区提供给函数。我试过这个:
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'))
})
});
有时它可以工作,但有时却不能 - 我的猜测是文件在读取时并未完全写入。 (但是“结束”事件不应该被触发?! 如您所见,我想下载一堆文件并执行此操作。您对如何解决这个问题有什么建议吗?也许这不是解决这个问题的最佳方法......
最佳答案
您不应该使用 on('data'
链接流,您应该使用管道。管道会将流数据事件链接到写入,将结束事件链接到结束。
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'));
});
关于node.js - 下载文件,保存并再次读取 --> 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15748232/