src/lib/plugins/storage/url.md
URL 存储插件,用于引用外部资源而非实际上传文件。
概述
该插件是最简单的存储实现,不执行实际文件上传,仅用于存储和引用外部 URL。适合以下场景:
- 用户使用第三方图床(如 Imgur、Cloudinary)
- 引用 CDN 上的静态资源
- 不需要文件上传功能的轻量级部署
主要导出
urlStoragePlugin
存储插件实例,实现了 StoragePlugin 接口。
import { urlStoragePlugin } from "@/lib/plugins/storage/url";
功能特性
始终可用
isConfigured: () => true
无需任何配置即可使用。
不支持文件上传
async upload(file: File | Buffer): Promise<UploadResult> {
throw new Error(
"URL storage plugin does not support file uploads. " +
"Please provide an external URL instead, or configure an upload-capable storage plugin like S3."
);
}
当尝试上传文件时会抛出错误,提示用户使用外部 URL。
删除无操作
async delete(): Promise<void> {
// URLs cannot be deleted as they're external
// This is a no-op
}
删除操作是空操作(no-op),因为 URL 是外部资源,无法通过此插件删除。
使用场景
适合
- 简单部署,不想配置对象存储
- 用户习惯使用外部图床
- 所有媒体资源已托管在 CDN
不适合
- 需要用户上传文件的场景
- 需要统一的资源管理
- 需要自动图片处理(缩略图、压缩等)
配置方式
在环境变量中启用:
ENABLED_STORAGE=url
或不设置(默认值即为 url)。
前端使用
当使用 URL 存储时,前端应该:
- 显示提示信息
``tsx
请输入外部图片或视频的 URL
``
- URL 输入框而非文件选择器
``tsx
``
- 预览外部资源
``tsx
``
注意事项
- 不验证 URL 有效性:插件不检查 URL 是否可访问
- 不处理跨域问题:前端需要处理外部图片的 CORS
- 无文件管理:无法删除或更新外部资源
- 依赖外部服务:如果外部资源被删除,链接将失效
- 安全风险:接受任意 URL 可能存在安全风险(XSS 等),前端应做好 URL 验证