This commit is contained in:
David Newman 2025-12-15 09:47:18 +10:00 committed by GitHub
commit 39c682ce9d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 0 deletions

View file

@ -11,8 +11,10 @@ const {
DeleteObjectCommand,
} = require('@aws-sdk/client-s3');
const endpoint = process.env.AWS_ENDPOINT_URL;
const bucketName = process.env.AWS_BUCKET_NAME;
const defaultBasePath = 'images';
const forcePathStyle = ['1', 'true', 'yes'].includes(process.env.AWS_FORCE_PATH_STYLE?.toLowerCase());
let s3UrlExpirySeconds = 2 * 60; // 2 minutes
let s3RefreshExpiryMs = null;
@ -250,6 +252,13 @@ function extractKeyFromS3Url(fileUrlOrKey) {
try {
const url = new URL(fileUrlOrKey);
if (endpoint?.trim() && forcePathStyle) {
const endpointUrl = new URL(endpoint)
const startPos = endpointUrl.pathname.length + (endpointUrl.pathname.endsWith('/') ? 2 : 1) + bucketName.length + 1;
return url.pathname.substring(startPos);
}
return url.pathname.substring(1);
} catch (error) {
const parts = fileUrlOrKey.split('/');
@ -258,6 +267,12 @@ function extractKeyFromS3Url(fileUrlOrKey) {
return fileUrlOrKey;
}
if (endpoint?.trim() && forcePathStyle) {
const endpointUrl = new URL(endpoint)
const startPos = endpointUrl.pathname.length + (endpointUrl.pathname.endsWith('/') ? 2 : 1) + bucketName.length + 1;
return fileUrlOrKey.substring(startPos);
}
return fileUrlOrKey.startsWith('/') ? fileUrlOrKey.substring(1) : fileUrlOrKey;
}
}

View file

@ -28,9 +28,11 @@ export const initializeS3 = (): S3Client | null => {
const endpoint = process.env.AWS_ENDPOINT_URL;
const accessKeyId = process.env.AWS_ACCESS_KEY_ID;
const secretAccessKey = process.env.AWS_SECRET_ACCESS_KEY;
const forcePathStyle = ['1', 'true', 'yes'].includes(process.env.AWS_FORCE_PATH_STYLE?.toLowerCase());
const config = {
region,
forcePathStyle: forcePathStyle, // Enable path-style addressing
// Conditionally add the endpoint if it is provided
...(endpoint ? { endpoint } : {}),
};