对象存储

对象存储

存储层兼容 S3 风格服务,例如 AWS S3、Cloudflare R2 和 MinIO。

主要文件

路径作用
src/features/storage/providers/s3.tsS3-compatible provider
src/features/storage/actions.ts存储 Server Actions
src/features/storage/utils.ts工具函数
src/features/storage/types.ts存储类型
src/app/api/upload/presigned/route.tsPresigned upload endpoint
src/app/image-proxy/[...path]/route.ts图片代理路由
src/test/storage/security.test.ts存储安全测试

环境变量

变量作用
STORAGE_ENDPOINTProvider endpoint,例如 R2 endpoint
STORAGE_REGIONS3 region 或兼容值
STORAGE_BUCKETBucket 名称
STORAGE_ACCESS_KEY_IDAccess key
STORAGE_SECRET_ACCESS_KEYSecret key

上传模型

  1. 客户端请求 presigned upload URL。
  2. 服务端校验请求并返回上传 metadata。
  3. 客户端直传到对象存储。
  4. 应用保存或使用 object key。
  5. 公开展示时可以走 image proxy。

安全 checklist

  • 创建 presigned URL 前校验文件类型和大小。
  • object key 要有作用域,不要可预测。
  • 不要把 secret key 暴露给浏览器。
  • 优先使用私有 bucket,配合 signed read 或 proxy route。
  • 修改上传规则后运行存储安全测试。
pnpm test:run src/test/storage

本页目录