我正在用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