Add range header support to files.get (#6950)

This commit is contained in:
Tom Moor
2024-05-28 08:12:25 -04:00
committed by GitHub
parent f58f309321
commit 50bbe05334
4 changed files with 52 additions and 6 deletions

View File

@@ -32,7 +32,8 @@ export default abstract class BaseStorage {
* @param key The path to the file
*/
public abstract getFileStream(
key: string
key: string,
range?: { start?: number; end?: number }
): Promise<NodeJS.ReadableStream | null>;
/**

View File

@@ -131,8 +131,12 @@ export default class LocalStorage extends BaseStorage {
};
}
public getFileStream(key: string) {
return Promise.resolve(fs.createReadStream(this.getFilePath(key)));
public getFileStream(key: string, range?: { start: number; end: number }) {
return Promise.resolve(fs.createReadStream(this.getFilePath(key), range));
}
public stat(key: string) {
return fs.stat(this.getFilePath(key));
}
private getFilePath(key: string) {

View File

@@ -201,12 +201,16 @@ export default class S3Storage extends BaseStorage {
});
}
public getFileStream(key: string): Promise<NodeJS.ReadableStream | null> {
public getFileStream(
key: string,
range?: { start: number; end: number }
): Promise<NodeJS.ReadableStream | null> {
return this.client
.send(
new GetObjectCommand({
Bucket: this.getBucket(),
Key: key,
Range: range ? `bytes=${range.start}-${range.end}` : undefined,
})
)
.then((item) => item.Body as NodeJS.ReadableStream)