node.js - 下载文件,保存并再次读取 --> 错误

标签 node.js

我想下载一个文件,将其写入临时文件,读取它并将 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/

相关文章:

javascript - 在书架 js 对象中使用 orWhere

node.js - 解决promise的Sinon.JS stub 返回 "{}"

node.js - 为什么这个 node.js http 请求会无限期挂起?

javascript - 如何使用 Node.js 将 blob base64 字符串上传到谷歌云存储

node.js - URI 错误 : Failed to decode param '/%PUBLIC_URL%/favicon.ico'

javascript - 返回似乎没有等待 javascript

node.js - 使用 Selenium 服务器运行 Protractor 测试时遇到问题

ruby-on-rails - 如何在compoundjs Controller 中从json检索数据

node.js - Nodejs 应用程序未使用 docker compose 运行

mysql - Heroku 部署错误 :connection refused