@nocobase/plugin-file-manager
Version:
Provides files storage services with files collection template and attachment field.
25 lines (24 loc) • 978 B
JavaScript
import { Buffer } from "buffer";
export async function* getChunkStream(data, partSize, getNextData) {
let partNumber = 1;
const currentBuffer = { chunks: [], length: 0 };
for await (const datum of getNextData(data)) {
currentBuffer.chunks.push(datum);
currentBuffer.length += datum.byteLength;
while (currentBuffer.length > partSize) {
const dataChunk = currentBuffer.chunks.length > 1 ? Buffer.concat(currentBuffer.chunks) : currentBuffer.chunks[0];
yield {
partNumber,
data: dataChunk.subarray(0, partSize),
};
currentBuffer.chunks = [dataChunk.subarray(partSize)];
currentBuffer.length = currentBuffer.chunks[0].byteLength;
partNumber += 1;
}
}
yield {
partNumber,
data: currentBuffer.chunks.length !== 1 ? Buffer.concat(currentBuffer.chunks) : currentBuffer.chunks[0],
lastPart: true,
};
}