【发布时间】:2013-08-01 19:40:46
【问题描述】:
我将文件保存到缓冲区并缓存缓冲区以供将来使用。现在我想使用缓冲区来创建一个流,以便我可以再次将它传递给响应。这可能吗?如果是,那又如何?
【问题讨论】:
标签: node.js
我将文件保存到缓冲区并缓存缓冲区以供将来使用。现在我想使用缓冲区来创建一个流,以便我可以再次将它传递给响应。这可能吗?如果是,那又如何?
【问题讨论】:
标签: node.js
感谢 felixge(节点提交者,esp 流模块),我发现这是最有前途的 https://github.com/felixge/node-combined-stream
先将文件传输到缓冲区然后构造流和管道以处理标准输出的示例,修改自article
(你可以直接从文件系统流中管道,这里是为了说明)
var fs = require("fs");
var fileName = "image.jpg";
var CombinedStream = require('combined-stream');
var combinedStream = CombinedStream.create();
fs.exists(fileName, function(exists) {
if (exists) {
fs.stat(fileName, function(error, stats) {
fs.open(fileName, "r", function(error, fd) {
var buffer = new Buffer(stats.size);
fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
fs.close(fd);
//even the file stream closed
combinedStream.append(buffer);
combinedStream.pipe(process.stdout);
});
});
});
}
});
//get buffer
var buffer = readFileSync(fileName);
//or do it yourself
var stats = fs.statSync(fileName);
var buffer = new Buffer(stats.size);
var fd = fs.openSync(fileName,"r");
fs.readSync(fd,buffer,0,buffer.length,null);
fs.close(fd);
combinedStream.append(buffer);
combinedStream.pipe(process.stdout);
【讨论】:
节点中没有执行此操作的本机功能。您可能会搜索一下,看看是否有第三方库。如果没有,有可能(如果有点乏味的话)编写自己的模块来完成它,因为任何实现Stream 文档中列出的所有方法和属性并发出并响应所有事件的类文档中列出的是,根据定义,Stream 可以在节点的内置Streams 可以使用的任何地方使用。
【讨论】: