下载文件,保存并再次阅读 – >错误
我想下载一个文件,把它写到一个临时文件中,读取它并给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')) }); }) });
- 是mongoose保存asynchronous?
- nodejsasynchronousmyMethod未定义
- 如果一个函数是一个生成器函数,如果.bind()已经被调用,是不可能的?
- 在使用Angular的单页面应用程序引擎时,依靠socket.io/express.io中的“disconnect”事件
- Eclipsedebugging器“无法读取variables”
- nodejs exec在真实terminal中给出比函数调用更多的输出
- Redis和哨兵通信
- 在Visual Studio的预生成中使用webpack
- AngularJS / Jade错误:参数'MyController'不是一个函数,没有定义(MEAN)