我在nodejs中使用一个可以从读取流中读取的库。我正在打开一个文件读取流并将其传递给lib。但是我还需要在我正在阅读的文件系统上创建文件。因此,第1步是创建一个写文件流并将我的数据流式传输到该文件。
我不喜欢这个过程的事情是我必须在完成后清理文件系统。有没有办法可以直接写入读取流并一步完成所有操作?
修改 具体示例(使用https://github.com/ctalkington/node-archiver):
// some route
function(req, res, next) {
var archive = archiver('zip');
res.attachment("icons.zip");
archive.pipe(res);
// I have to create files on file system
var stream1 = fs.createWriteStream("file1.txt");
var stream2 = fs.createWriteStream("file2.txt");
...
// all stuff is one streaming to file system
// now stream stuff from file system to archive
archive
.append(fs.createReadStream("file1.txt"), { name: 'file1.txt' })
.append(fs.createReadStream("file2.txt"), { name: 'file2.txt' })
.finalize();
}
我不知道如何首先避免流式传输到文件系统。
编辑:
简单的问题就是这样:
我可以写一个可读的流吗?
答案 0 :(得分:2)
似乎这么容易回答,不能相信我错过了这个。
看起来我可以使用PassThrough:
http://nodejs.org/api/stream.html#stream_class_stream_passthrough
Class:stream.PassThrough#这是一个简单的实现 转换流,简单地将输入字节传递给 输出。它的目的主要是用于实例和测试,但也有 偶尔使用它作为构建块可以派上用场的情况 对于新型的溪流。
答案 1 :(得分:0)
将可读流传输到响应或可写流。
要管道到客户端,您可以执行以下操作:
// the response object is a writable stream too.
// Send the headres first (Dont forget these, and change the content type.)
res.writeHead(200, {
'Content-Type': 'application/pdf',
'Access-Control-Allow-Origin': '*'
});
var resStream = readableStm.pipe(res); // readableStm should be a READABLE stream
// listen to the finish ev.
resStream.on('finish', function () {
res.end();
});