From 404d63f6d007feb57c2fcfe1aa70c3085ae25231 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Tue, 15 Apr 2025 13:28:12 +0200 Subject: [PATCH] feat(media): :sparkles: Add path_style and path configuration to S3 --- classes/config/schema.ts | 2 ++ classes/database/media.ts | 6 +++++- config/config.example.toml | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/classes/config/schema.ts b/classes/config/schema.ts index bc47e6f7..937b4dde 100644 --- a/classes/config/schema.ts +++ b/classes/config/schema.ts @@ -449,6 +449,8 @@ export const ConfigSchema = z public_url: url.describe( "Public URL that uploaded media will be accessible at", ), + path: z.string().optional(), + path_style: z.boolean().default(true), }) .optional(), validation: z.strictObject({ diff --git a/classes/database/media.ts b/classes/database/media.ts index 40ca5708..ae398c1d 100644 --- a/classes/database/media.ts +++ b/classes/database/media.ts @@ -159,11 +159,15 @@ export class Media extends BaseInterface { bucket: config.s3.bucket_name, accessKeyId: config.s3.access_key, secretAccessKey: config.s3.secret_access_key, + virtualHostedStyle: !config.s3.path_style, }); await client.write(path, file); + const finalPath = config.s3.path + ? join(config.s3.path, path) + : path; - return { path }; + return { path: finalPath }; } } } diff --git a/config/config.example.toml b/config/config.example.toml index 55552858..ce0ebb76 100644 --- a/config/config.example.toml +++ b/config/config.example.toml @@ -153,6 +153,12 @@ convert_vectors = false # region = "us-east-1" # bucket_name = "versia" # public_url = "https://cdn.example.com" +# Adds a prefix to the uploaded files +# path = "versia" +# Use path-style URLs during upload (e.g. https://s3.example.com/versia) +# instead of the default virtual-hosted style (e.g. https://versia.s3.example.com) +# This is required for some S3-compatible services, such as MinIO +# path_style = true [validation] # Checks user data