Node.js流在使用之间没有刷新。如何刷新?

10

我在使用Node.js Streams/Buffers时遇到了问题,第一次使用后它们没有被关闭/刷新。我创建了一个读取流,从fs.createReadStream中读取,并将其导入到自定义的写入流中去。每个块的highWaterMark约为2MB(这很重要)。当我最初通过一个大约3MB的文件进行流传输时,我的流处理了两个块,首先是一个大约2MB的块,然后是一个大约1MB的块。这是预期的。

在我传递的第二个文件中,第一个块只有大约1MB。这是一个问题。当我累加传输的字节时,我可以清楚地看到,在第一个文件之后,相关的流/缓冲区没有被正确清理。以下是数学上如何证明:

第一个文件传输的最终块大小为875,837字节。传输的下一个文件的第一个块大小为1,221,316字节(预期:2,097,152字节)。当您将875,837添加到1,221,316时,您会得到2,097,153,这是我之前提到的高水位标记(带有一个错误的偏移量)。

以下是我的代码:

return new Promise(async (resolve, reject) => {
    const maximalChunkedTransferSize = 2*1024*1024; // 2MB (Minimum amount, Autodesk recommends 5MB).

    const pathToFile = await bucketManagement.locationOfBucketZip(bucketEntity.name);
    let readFileStream = fs.createReadStream(pathToFile, { highWaterMark: maximalChunkedTransferSize });

    let writeStream = new HttpAutodeskPutBucketObjectWriteStream(accessToken, bucketEntity);
    readFileStream.pipe(writeStream);

    writeStream.on("finish", () => {
        resolve(writeStream.urn);
    });
    writeStream.on("error", err => reject("Putting the file into the bucket failed. " + err.message));
});

我已尝试在读写流上调用.destroy()。我已尝试调用.end().unpipe()等方法。但这些都没有起作用。我该如何销毁/刷新流和/或底层缓冲区,以使下一个文件的第一块为预期的2MB?


1
你有没有找到解决办法? - CoffeePeddlerIntern
1
你有没有找到解决办法? - SRR
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接