chore(server): improve stream read (#10960)

This commit is contained in:
darkskygit
2025-03-18 10:24:59 +00:00
parent 0cb06668cd
commit b7ab49a263
5 changed files with 70 additions and 75 deletions
@@ -8,6 +8,7 @@ import {
CallMetric,
Config,
type FileUpload,
readBuffer,
type StorageProvider,
StorageProviderFactory,
URLHelper,
@@ -63,29 +64,7 @@ export class CopilotStorage {
throw new BlobQuotaExceeded();
}
const buffer = await new Promise<Buffer>((resolve, reject) => {
const stream = blob.createReadStream();
const chunks: Uint8Array[] = [];
stream.on('data', chunk => {
chunks.push(chunk);
// check size after receive each chunk to avoid unnecessary memory usage
const bufferSize = chunks.reduce((acc, cur) => acc + cur.length, 0);
if (checkExceeded(bufferSize)) {
reject(new BlobQuotaExceeded());
}
});
stream.on('error', reject);
stream.on('end', () => {
const buffer = Buffer.concat(chunks);
if (checkExceeded(buffer.length)) {
reject(new BlobQuotaExceeded());
} else {
resolve(buffer);
}
});
});
const buffer = await readBuffer(blob.createReadStream(), checkExceeded);
return {
buffer,