src/lib/plugins/storage/index.ts

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

添加新存储插件

要添加新的存储插件:

  1. 创建新的插件文件(如 ./minio.ts
  2. 实现 StoragePlugin 接口
  3. 在此文件中添加新的条件分支
if (ENABLED_STORAGE === "minio") {
  import("./minio").then(({ minioStoragePlugin }) => {
    registerStoragePlugin(minioStoragePlugin);
  });
  return;
}

相关文档

  • url.ts - URL 存储
  • s3.ts - AWS S3 存储
  • do-spaces.ts - DigitalOcean Spaces
← 返回目录