Skip to content

存储配置

更新时间:2026/9/20 18:22:48

平台的文件(网站素材、对账单等)统一通过 S3 兼容协议存储,支持 MinIO、阿里云 OSS、腾讯云 COS、华为云 OBS、AWS S3 等 S3 兼容的对象存储。 配置入口:管理端 → 系统配置 → 平台配置 → 存储。

上传机制

平台使用「预签名直传」方式上传文件,分三步:

  1. 管理端向后端申请一个预签名上传地址;
  2. 浏览器拿地址直接把文件传到对象存储(文件不经过后端服务器);
  3. 后端确认文件存在后登记文件记录。

因此有一个必须提前完成的动作:在存储桶上配置 CORS 跨域规则,否则「测试连接」通过、真正上传时仍然失败。以阿里云 OSS 为例(各云厂商位置类似:桶 → 数据安全 → 跨域设置):

配置项
来源 Origin管理端访问地址,如 https://admin.example.com
方法 MethodsPUT, GET, HEAD, POST
Allow Headers*
Expose HeadersETag

参数说明

参数必填说明
服务端点存储服务的 API 地址,必须带 https://,且不要带桶名
存储区域视情况见下方「存储区域要不要填」
访问密钥 / 私有密钥存储服务的 AccessKey / SecretKey
路径样式访问地址风格开关,见下方说明
公开存储桶 / 私有存储桶桶名,可以填同一个桶,见「单桶说明」
公开访问域名建议公开桶文件的对外访问地址,不要带桶名(系统自动拼接桶名)
私有访问域名一般留空,私有文件走预签名地址访问
基础存储路径对象键的统一前缀,如 daxpay
上传预签名URL有效期上传地址的有效分钟数,默认 10 分钟
下载或查看预签名URL有效期私有文件访问地址的有效小时数,默认 72 小时

存储区域要不要填

「存储区域」只参与请求签名,不决定访问哪个数据中心——真正决定访问地址的是「服务端点」。所以多数场景这个参数可以不填:

存储服务是否需要填写示例值
MinIO / 自建 S3 兼容存储不需要,留空即可
阿里云 OSS建议填写cn-beijingcn-hangzhou
华为云 OBS建议填写cn-north-4
腾讯云 COS必须填写(校验签名区域)ap-shanghaiap-guangzhou
AWS S3必须填写us-east-1ap-northeast-1
七牛云 Kodo必须填写cn-east-1
Cloudflare R2固定值auto

留空时按 us-east-1 参与签名,MinIO 等不校验签名区域的存储完全不受影响。具体区域代码以各厂商的 S3 兼容文档为准。

路径样式访问

同一个桶有两种地址风格:

  • 路径样式(开启)https://服务端点/桶名/对象 —— MinIO 等自建存储必须开启
  • 虚拟主机样式(关闭)https://桶名.服务端点域名/对象 —— 云厂商的原生风格

怎么选

自建 MinIO 一律开启;云厂商多数两种都支持,参照下方实例中的推荐值即可。

关于公开访问域名

公开文件的最终地址 = 公开访问域名 / 公开桶名 / 对象键,桶名由系统自动追加,所以:

  • 这里填不带桶名的服务地址,如 https://oss-cn-beijing.aliyuncs.com
  • 如果给桶绑定了 CDN / 自定义域名,需保证按「域名/桶名/对象」的路径形态能访问到文件,否则会出现文件已上传但页面上图片裂图

单桶说明

公开桶和私有桶可以填同一个桶名,此时桶的读写权限建议设为「公共读」:公开文件可以直接访问,私有文件通过预签名地址访问也正常。

代价是「私有」变为名义私有——拿到完整地址的任何人都能读取该文件。生产环境建议分建两个桶,让权限语义真实成立。

配置实例

实例一:MinIO 自建

参数
服务端点https://minio.example.com(MinIO 的 API 端口,不是控制台端口)
存储区域留空
路径样式访问开启
公开访问域名https://minio.example.com(或该 MinIO 对外的公开访问域名)

密钥为 MinIO 的 AccessKey / SecretKey(通过 mc admin 创建用户时生成)。

实例二:阿里云 OSS(以华北2北京为例)

参数
服务端点https://oss-cn-beijing.aliyuncs.com
存储区域cn-beijing
路径样式访问开启
公开存储桶 / 私有存储桶daxpay-pub / daxpay-priv(或填同一个桶名)
公开访问域名https://oss-cn-beijing.aliyuncs.com

密钥为 RAM 用户的 AccessKey,最小权限需要两个桶上的 PutObjectGetObjectDeleteObjectListObjectsGetBucketInfo

注意:即使后端部署在阿里云 ECS 上,也不要把服务端点换成内网地址(-internal 结尾)——上传是浏览器直传,用户的浏览器访问不到内网地址。

实例三:腾讯云 COS(以上海为例)

参数
服务端点https://cos.ap-shanghai.myqcloud.com
存储区域ap-shanghai(必须填写)
路径样式访问关闭
公开访问域名https://cos.ap-shanghai.myqcloud.com

密钥为腾讯云子账号的 SecretId / SecretKey。

测试与排错

保存配置后点「测试连接」,系统会对两个桶各执行「桶存在 → 写入探测文件 → 读取 → 删除」的完整闭环,通过即说明读写权限就绪。

常见报错对照:

现象原因处理
测试通过,上传文件失败存储桶未配置 CORS 跨域规则按「上传机制」一节的表配置
写入失败,请检查密钥是否具备上传权限密钥缺少写权限 / 桶策略拒绝写入 / 桶开启了 KMS 加密但密钥无 KMS 权限后端日志搜「探测写入失败」看真实状态码;给密钥临时挂完全权限二分定位
文件已上传但图片显示不出来公开访问域名带了桶名,或公开桶权限为私有域名去掉桶名;公开桶权限设为公共读
上传成功但文件记录一直处理中密钥能写不能读补充读权限(GetObject)

WARNING

「系统文件列表里有一条记录」不代表上传成功——记录在申请上传地址时就会创建,文件真正可访问才算完成。

相关链接

官方网站 · 基于 GNU LGPL v3.0 协议开源