我在使用Node.js流/缓冲区时遇到问题,在第一次使用后它们没有被关闭/丢弃。我有一个从fs.createReadStream
创建的读取流,正在将其输送到自定义写入流。每个块的highWaterMark
为〜2MB(这很重要)。当我最初通过〜3MB文件流式传输时,我的流将其分为2个块处理,首先是〜2MB块,然后是〜1MB块。这是预期的。
在我通过的第二个文件上,第一个块只有〜1MB。这是一个问题。当我加总管道传输的字节时,可以清楚地看到在第一个文件之后,未正确清理关联的流/缓冲区。可以用以下数学公式来显示:
第一个文件的最后传输块为875,837字节。传输的 next 文件的第一块是1,221,316字节(预期:2,097,152字节)。当您将875,837加到1,221,316时,您将得到2,097,153,这是我之前提到的最高水位线(误差为1)。
这是我得到的代码:
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?