src/lib/plugins/storage/index.ts
存储插件注册模块,根据环境变量动态注册存储插件。
概述
该模块是存储插件系统的入口,根据 ENABLED_STORAGE 环境变量动态选择和注册相应的存储插件。支持多种存储后端:
- URL 存储(外部链接)
- AWS S3 存储
- DigitalOcean Spaces 存储
主要导出
registerBuiltInStoragePlugins
根据 ENABLED_STORAGE 环境变量注册相应的存储插件。
import { registerBuiltInStoragePlugins } from "@/lib/plugins/storage";
registerBuiltInStoragePlugins();
urlStoragePlugin
URL 存储插件实例,用于引用外部资源。
import { urlStoragePlugin } from "@/lib/plugins/storage";
环境变量
ENABLED_STORAGE
控制启用哪个存储插件:
# 默认值:url
ENABLED_STORAGE=url
# AWS S3
ENABLED_STORAGE=s3
# DigitalOcean Spaces
ENABLED_STORAGE=do-spaces
插件注册逻辑
URL 存储(默认)
if (ENABLED_STORAGE === "url") {
registerStoragePlugin(urlStoragePlugin);
}
- 始终可用
- 不支持实际上传,仅存储外部 URL
- 零配置要求
S3 存储
if (ENABLED_STORAGE === "s3") {
import("./s3").then(({ s3StoragePlugin }) => {
registerStoragePlugin(s3StoragePlugin);
});
}
- 使用动态导入(dynamic import)
- 需要安装
@aws-sdk/client-s3 - 需要配置 S3 相关环境变量
DigitalOcean Spaces
if (ENABLED_STORAGE === "do-spaces") {
import("./do-spaces").then(({ doSpacesStoragePlugin }) => {
registerStoragePlugin(doSpacesStoragePlugin);
});
}
- 使用动态导入
- 需要安装
@aws-sdk/client-s3 - DO Spaces 是 S3 兼容的存储服务
使用方式
通常在应用启动时通过 initializePlugins() 自动调用:
import { initializePlugins } from "@/lib/plugins";
// 自动根据 ENABLED_STORAGE 注册存储插件
initializePlugins();
环境变量要求
S3 存储
ENABLED_STORAGE=s3
S3_BUCKET=your-bucket
S3_REGION=us-east-1
S3_ACCESS_KEY_ID=your-access-key
S3_SECRET_ACCESS_KEY=your-secret-key
S3_ENDPOINT=optional-custom-endpoint
DigitalOcean Spaces
ENABLED_STORAGE=do-spaces
DO_SPACES_BUCKET=your-bucket
DO_SPACES_REGION=nyc3
DO_SPACES_ACCESS_KEY_ID=your-access-key
DO_SPACES_SECRET_ACCESS_KEY=your-secret-key
DO_SPACES_CDN_ENDPOINT=optional-cdn-endpoint
添加新存储插件
要添加新的存储插件:
- 创建新的插件文件(如
./minio.ts) - 实现
StoragePlugin接口 - 在此文件中添加新的条件分支
if (ENABLED_STORAGE === "minio") {
import("./minio").then(({ minioStoragePlugin }) => {
registerStoragePlugin(minioStoragePlugin);
});
return;
}
相关文档
- url.ts - URL 存储
- s3.ts - AWS S3 存储
- do-spaces.ts - DigitalOcean Spaces