diff --git a/cdn/src/util/S3Storage.ts b/cdn/src/util/S3Storage.ts
index 8c7f7813..df5bc19c 100644
--- a/cdn/src/util/S3Storage.ts
+++ b/cdn/src/util/S3Storage.ts
@@ -13,14 +13,21 @@ const readableToBuffer = (readable: Readable): Promise<Buffer> =>
export class S3Storage implements Storage {
public constructor(
private client: S3,
- private basePath: string,
- private bucket: string
+ private bucket: string,
+ private basePath?: string,
) {}
+ /**
+ * Always return a string, to ensure consistency.
+ */
+ get bucketBasePath() {
+ return this.basePath ?? '';
+ }
+
async set(path: string, data: Buffer): Promise<void> {
await this.client.putObject({
Bucket: this.bucket,
- Key: `${this.basePath}${path}`,
+ Key: `${this.bucketBasePath}${path}`,
Body: data
});
}
@@ -29,7 +36,7 @@ export class S3Storage implements Storage {
try {
const s3Object = await this.client.getObject({
Bucket: this.bucket,
- Key: `${this.basePath}${path}`
+ Key: `${this.bucketBasePath ?? ''}${path}`
});
if (!s3Object.Body) return null;
@@ -47,7 +54,7 @@ export class S3Storage implements Storage {
async delete(path: string): Promise<void> {
await this.client.deleteObject({
Bucket: this.bucket,
- Key: `${this.basePath}${path}`
+ Key: `${this.bucketBasePath}${path}`
});
}
}
diff --git a/cdn/src/util/Storage.ts b/cdn/src/util/Storage.ts
index acef9df3..3332f21c 100644
--- a/cdn/src/util/Storage.ts
+++ b/cdn/src/util/Storage.ts
@@ -45,13 +45,13 @@ if (process.env.STORAGE_PROVIDER === "file" || !process.env.STORAGE_PROVIDER) {
let location = process.env.STORAGE_LOCATION;
if (!location) {
- console.warn(`[CDN] STORAGE_LOCATION unconfigured for S3 provider, defaulting to '/'...`);
- location = "/";
+ console.warn(`[CDN] STORAGE_LOCATION unconfigured for S3 provider, defaulting to the bucket root...`);
+ location = undefined;
}
const client = new S3({ region });
- storage = new S3Storage(client, location, bucket);
+ storage = new S3Storage(client, bucket, location);
}
export { storage };
|