src/lib/plugins/storage/url.md

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 存储时,前端应该:

  1. 显示提示信息

``tsx 请输入外部图片或视频的 URL ``

  1. URL 输入框而非文件选择器

``tsx ``

  1. 预览外部资源

``tsx ``

注意事项

  1. 不验证 URL 有效性:插件不检查 URL 是否可访问
  2. 不处理跨域问题:前端需要处理外部图片的 CORS
  3. 无文件管理:无法删除或更新外部资源
  4. 依赖外部服务:如果外部资源被删除,链接将失效
  5. 安全风险:接受任意 URL 可能存在安全风险(XSS 等),前端应做好 URL 验证
← 返回目录