我正在用Busboy处理多部分形式的文件。在简化版本的过程是这样的:如何根据第一块中的数据将流重定向到其他流?
file.pipe(filePeeker).pipe(gzip的).pipe(加密).pipe(uploadToS3)
filePeeker是通过流(用trough2建)。这间复式流执行以下操作:
- 在第一区块中
- 看着第一字节累积文件大小
- 计算MD5哈希
在第一个块的前四个字节后识别文件类型我知道该文件是否为zip文件。如果是这种情况,我想将文件重定向到一个完全不同的流。在新流中,压缩文件将被解压缩,然后分别使用与原始文件相同的概念进行处理。
我该如何做到这一点?
OriginalProcess: file.pipe(filePeeker)。如果.pipe(GZIP).pipe(加密).pipe(uploadToS3)
解压过程 file.pipe(filePeeker)。如果(zip文件!) (zip文件).pipe(streamUnzip).pipeEachNewFile(originalProcess)。
感谢 //迈克尔
谢谢。在尝试此操作之前,我必须先阅读更多关于流的信息。我想知道为什么我不能这样做,从我的流内:if(isZip)fileStream.unshift(chunk); fileStream.push(''); fileStream.unpipe(); fileStream.pipe(unzip) – Michael
目前我想这是唯一的方法。模块只是为你抽象这个行为。 此外,我猜API将来不会有这样的糖。 – eljefedelrodeodeljefe
在阅读本文时,请注意,这是Node的一个更高级的主题。很少有人甚至了解Streams的来源。但这没关系,因为当你采用这种编程风格时,你永远不会想回去。 – eljefedelrodeodeljefe