我有一个我想多次阅读的ReadStream。 readStream是使用fs.createReadStream创建的。
我第一次使用它来获取它md5
哈希,我正在使用模块hasha
,函数fromStream
,第二次我使用它FormData
将文件上传到网络托管。
如何使用这一个ReadStream来完成这两件事?
readStream = fs.createReadStream("/tmp/test.txt");
hash = await hasha.fromStream(readStream, hashOptions);
readStream.on("data", (chunk) => console.log("data chunk", chunk)).on("end", () => console.log("finished"));
它没有按原样将内容记录到控制台,可能是因为hasha.fromStream
它是pipe
的流。如果我不执行hasha.fromStream
它工作正常,则会记录块。
我正在使用的模块hasha
位于github上:https://github.com/sindresorhus/hasha/blob/master/index.js#L45
我不希望在获取哈希值之前将数据保存到缓冲区,因为我将在大文件中使用它。
我还制作了一个显示我的问题的runkit脚本,你可以在那里玩它: https://runkit.com/5942fba4653ae70012196b77/5942fba4653ae70012196b78
答案 0 :(得分:2)
您可以通过重新读取文件来重新创建流,也可以回放流,如下所述:How to reset nodejs stream?
答案 1 :(得分:1)
这是一个关于如何" fork"的独立示例。一个流,所以你可以将它传送到两个目的地:
const PassThrough = require('stream').PassThrough;
async function hashAndPost(stream) {
let pass1 = new PassThrough;
let pass2 = new PassThrough;
stream.pipe(pass1);
stream.pipe(pass2);
// Destination #1
pass1.on('data', chunk =>
console.log('data chunk', chunk.toString())
).on('end', () =>
console.log('finished')
);
// Destination #2
let hash = await hasha.fromStream(pass2, { algorithm : 'md5' });
console.log('hash', hash);
};