diff --git a/.env.template b/.env.template index e7c25568..2d183660 100644 --- a/.env.template +++ b/.env.template @@ -5,3 +5,4 @@ S3_BUCKET_NAME=images S3_PREFIX= S3_ENDPOINT= S3_CUSTOM_DOMAIN= +S3_EXCLUDE_REGEX= diff --git a/README.md b/README.md index 7d38f747..164c5f06 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ S3_ENDPOINT=https://s3.amazonaws.com S3_BUCKET_NAME=your_bucket_name S3_PREFIX=photos/ S3_CUSTOM_DOMAIN=your_custom_domain.com +S3_EXCLUDE_REGEX= ``` ### 4. Site Configuration @@ -207,6 +208,7 @@ Create `builder.config.json` file for advanced configuration: - `endpoint`: S3 endpoint (optional) - `prefix`: File prefix - `customDomain`: Custom domain +- `excludeRegex`: Regular expression to exclude files (optional) #### Build Options (`options`) diff --git a/README.zh.md b/README.zh.md index b28683ff..0ee698f9 100644 --- a/README.zh.md +++ b/README.zh.md @@ -102,6 +102,7 @@ S3_ENDPOINT=https://s3.amazonaws.com S3_BUCKET_NAME=your_bucket_name S3_PREFIX=photos/ S3_CUSTOM_DOMAIN=your_custom_domain.com +S3_EXCLUDE_REGEX= ``` ### 4. 站点配置 @@ -202,6 +203,7 @@ pnpm dev - `endpoint`: S3 端点(可选) - `prefix`: 文件前缀 - `customDomain`: 自定义域名 +- `excludeRegex`: 排除文件的正则表达式(可选) #### 构建选项 (`options`) @@ -318,4 +320,4 @@ MIT License © 2025 Innei --- -如果这个项目对你有帮助,请给个 ⭐️ Star 支持一下! \ No newline at end of file +如果这个项目对你有帮助,请给个 ⭐️ Star 支持一下! diff --git a/builder.config.ts b/builder.config.ts index 5ffb89bb..65c7218b 100644 --- a/builder.config.ts +++ b/builder.config.ts @@ -85,6 +85,7 @@ export const defaultBuilderConfig: BuilderConfig = { secretAccessKey: env.S3_SECRET_ACCESS_KEY, prefix: env.S3_PREFIX, customDomain: env.S3_CUSTOM_DOMAIN, + excludeRegex: env.S3_EXCLUDE_REGEX, }, options: { diff --git a/env.ts b/env.ts index 47f4aac1..394321d9 100644 --- a/env.ts +++ b/env.ts @@ -15,6 +15,7 @@ export const env = createEnv({ S3_BUCKET_NAME: z.string().min(1).optional(), S3_PREFIX: z.string().default('').optional(), S3_CUSTOM_DOMAIN: z.string().default('').optional(), + S3_EXCLUDE_REGEX: z.string().optional(), }, runtimeEnv: process.env, isServer: typeof window === 'undefined', diff --git a/packages/builder/src/storage/interfaces.ts b/packages/builder/src/storage/interfaces.ts index 5c287a09..51af8693 100644 --- a/packages/builder/src/storage/interfaces.ts +++ b/packages/builder/src/storage/interfaces.ts @@ -54,6 +54,7 @@ export type S3Config = { secretAccessKey?: string prefix?: string customDomain?: string + excludeRegex?: string } export type GitHubConfig = { diff --git a/packages/builder/src/storage/providers/s3-provider.ts b/packages/builder/src/storage/providers/s3-provider.ts index 97df3e3d..581d52cd 100644 --- a/packages/builder/src/storage/providers/s3-provider.ts +++ b/packages/builder/src/storage/providers/s3-provider.ts @@ -89,11 +89,16 @@ export class S3StorageProvider implements StorageProvider { const listResponse = await s3Client.send(listCommand) const objects = listResponse.Contents || [] + const excludeRegex = this.config.excludeRegex + ? new RegExp(this.config.excludeRegex) + : null // 过滤出图片文件并转换为通用格式 const imageObjects = objects .filter((obj: _Object) => { if (!obj.Key) return false + if (excludeRegex && excludeRegex.test(obj.Key)) return false + const ext = path.extname(obj.Key).toLowerCase() return SUPPORTED_FORMATS.has(ext) })