From be6add4be9be4f6d504588f5388ec6cf29d4ed69 Mon Sep 17 00:00:00 2001 From: Ivan Borshchov Date: Mon, 13 Mar 2023 13:25:50 +0200 Subject: [PATCH 1/2] AWS - previewBaseUrl * Allows to override 'https://${bucket}.s3.amazonaws.com' for previews in admin * mihgt be usefull for buckets served via CDN and static website hosting, e.g. https://support.cloudflare.com/hc/en-us/articles/360037983412-Configuring-an-Amazon-Web-Services-static-site-to-use-Cloudflare --- src/features/upload-file/providers/aws-provider.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/features/upload-file/providers/aws-provider.ts b/src/features/upload-file/providers/aws-provider.ts index c1faf80..cc86753 100644 --- a/src/features/upload-file/providers/aws-provider.ts +++ b/src/features/upload-file/providers/aws-provider.ts @@ -34,6 +34,12 @@ export type AWSOptions = { * Default to 24h. If set to 0 adapter will mark uploaded files as PUBLIC ACL. */ expires?: number; + + /** + * Allows to override 'https://${bucket}.s3.amazonaws.com' for previews in admin + * mihgt be usefull for buckets served via CDN and static website hosting, e.g. https://support.cloudflare.com/hc/en-us/articles/360037983412-Configuring-an-Amazon-Web-Services-static-site-to-use-Cloudflare + */ + previewBaseUrl?: string } export class AWSProvider extends BaseProvider { @@ -54,6 +60,7 @@ export class AWSProvider extends BaseProvider { } this.expires = options.expires ?? DAY_IN_MINUTES this.s3 = new AWS_S3(options) + this.previewBaseUrl = options.previewBaseUrl; } public async upload(file: UploadedFile, key: string): Promise { @@ -83,6 +90,6 @@ export class AWSProvider extends BaseProvider { }) } // https://bucket.s3.amazonaws.com/key - return `https://${bucket}.s3.amazonaws.com/${key}` + return this.previewBaseUrl || `https://${bucket}.s3.amazonaws.com/${key}` } } From ff2308cbd470f6832d6cc89c90f23232c9bcb5b5 Mon Sep 17 00:00:00 2001 From: Ivan Borshchov Date: Mon, 13 Mar 2023 17:06:18 +0200 Subject: [PATCH 2/2] Better handling for previewBaseUrl, add file native ContentType (e.g. to fix octet-stream for svg+xml files) --- src/features/upload-file/providers/aws-provider.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/features/upload-file/providers/aws-provider.ts b/src/features/upload-file/providers/aws-provider.ts index cc86753..e9896dd 100644 --- a/src/features/upload-file/providers/aws-provider.ts +++ b/src/features/upload-file/providers/aws-provider.ts @@ -47,6 +47,8 @@ export class AWSProvider extends BaseProvider { public expires: number + private previewBaseUrl: string | undefined + constructor(options: AWSOptions) { super(options.bucket) @@ -70,6 +72,7 @@ export class AWSProvider extends BaseProvider { Bucket: this.bucket, Key: key, Body: tmpFile, + ContentType: file.type } if (!this.expires) { params.ACL = 'public-read' @@ -90,6 +93,10 @@ export class AWSProvider extends BaseProvider { }) } // https://bucket.s3.amazonaws.com/key - return this.previewBaseUrl || `https://${bucket}.s3.amazonaws.com/${key}` + let base : string = `https://${bucket}.s3.amazonaws.com`; + if (this.previewBaseUrl) { + base = this.previewBaseUrl; + } + return `${base}/${key}` } }