9

我将文件保存到缓冲区并缓存缓冲区以供将来使用。现在我想使用缓冲区创建一个流,以便我可以再次将其通过管道传递给响应。这可能吗?如果是,那么如何?

4

2 回答 2

2

我发现这是最有希望的,这要归功于 felixge(节点提交者,esp 流模块) https://github.com/felixge/node-combined-stream

首先将文件管道传输到缓冲区然后构造流和管道以处理标准输出的示例,修改自文章

(您可以直接从文件系统流中进行管道传输,这里是为了说明)

从文件异步加载缓冲区

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);
于 2013-08-01T11:20:12.710 回答
1

节点中没有用于执行此操作的本机功能。您可能会搜索一下,看看是否有第三方库。如果没有,有可能,如果有点乏味,编写自己的模块来完成它,因为任何实现文档中列出的所有方法和属性的类,Stream并发出和响应列出的所有事件根据定义,documentationStreama并且可以在 node 的内置Streams 可以使用的任何地方使用。

于 2012-10-13T06:42:35.073 回答