存储方案
一、基本信息
存储方案用于配置系统上传图片、视频、附件时使用的对象存储服务。生产环境推荐使用阿里云 OSS、腾讯云 COS 或自建 MinIO,本地存储仅建议本地测试使用。

二、操作路径
通过【平台】-【设置】-【系统参数】-【存储方案】进行配置。
三、开通和配置
- 阿里云 OSS
- 腾讯云 COS
- MinIO
三方存储配置
按下面顺序完成阿里云控制台配置。标记为【重点】的内容,后面都需要填写到我们系统中。
| 系统字段 | 参考位置 |
|---|---|
| Bucket名称 | 参考【重点 1】。 |
| EndPoint(地域节点) | 参考【重点 2】。 |
| 密钥id | 参考【重点 3】。 |
| 密钥 | 参考【重点 3】。 |
| Ram角色Arn | 参考【重点 4】。 |
| StsEndPoint(地域节点) | 参考【重点 5】。 |
1. 创建 Bucket
登录阿里云 OSS 控制台,在【Bucket 列表】中点击【创建 Bucket】。

必要参数说明:
| 参数 | 建议 |
|---|---|
| Bucket 名称 | 后续要填写到系统【Bucket名称】。创建后不可修改,建议使用小写字母、数字和中划线。 |
| 地域 | 创建后不可修改,建议选择离 API 服务器或主要用户最近的地域。 |
| 存储类型 | 普通图片、附件上传选择【标准存储】。 |
| 存储冗余类型 | 按预算选择【本地冗余】或【同城冗余】。 |
| 版本控制 | 默认关闭即可,需要防误删时再开启。 |
配置完成后点击【完成创建】。

重点 1:Bucket 名称
这里创建的 Bucket 名称需要复制到我们系统【Bucket名称】。如果系统显示为【储存空间】,也填写这个 Bucket 名称。
示例:阿里云创建的 Bucket 名称为
shoptnt,系统【Bucket名称】填写shoptnt。
2. 获取 Endpoint
进入刚创建的 Bucket,在【概览】页面下方查看【访问端口】。

Endpoint 选择说明:
| 场景 | 填写方式 |
|---|---|
| API 服务不在阿里云,或不确定网络环境 | 使用【外网访问】Endpoint。 |
| API 服务部署在阿里云 ECS,且 ECS 与 Bucket 在同一地域 | 可以使用对应的内网 Endpoint。 |
| 小程序、App、HTTPS 站点 | 系统中填写 https:// 开头的 Endpoint。 |
重点 2:EndPoint(地域节点)
Bucket 页面中的 Endpoint 需要复制到我们系统【EndPoint(地域节点)】。
示例:如果选择外网 Endpoint
oss-cn-guangzhou.aliyuncs.com,系统【EndPoint(地域节点)】填写https://oss-cn-guangzhou.aliyuncs.com。内网 Endpoint 只能给服务器访问使用,不要把内网域名返回给浏览器作为图片访问地址。
3. 配置 Bucket 访问权限
进入 Bucket 左侧【权限控制】。

先进入【阻止公共访问】,关闭【阻止公共访问】。

再进入【读写权限】,Bucket ACL 选择【公共读】。

安全提示
只选择【公共读】,不要选择【公共读写】。公共读用于前端访问图片,公共写会带来安全风险。
4. 配置跨域 CORS
前端直传 OSS 前,需要给 Bucket 配置跨域规则。进入 Bucket 左侧【数据安全】-【跨域设置】,点击【创建规则】。

跨域规则建议按下表配置:
| 参数 | 测试环境 | 生产环境 |
|---|---|---|
| 来源 | 可先填写 * 快速验证 | 填写商城前端域名,例如 https://www.example.com。 |
| 允许 Methods | 勾选 GET、POST、PUT、DELETE、HEAD | 至少需要 POST、PUT,建议保留 GET、HEAD。 |
| 允许 Headers | 填写 * | 可填写 *,稳定后再按实际请求头收紧。 |
| 暴露 Headers | 填写 ETag、x-oss-request-id | 填写 ETag、x-oss-request-id。 |
| 缓存时间(秒) | 排查问题时可填 0 | 建议填 600 或更长。 |

5. 配置 RAM 用户和 STS 角色
推荐使用 STS Token 临时凭证访问 OSS。系统先使用 RAM 用户的 AccessKey 调用 STS AssumeRole,再用返回的临时凭证上传文件。
在 Bucket 的【权限控制】-【访问控制 RAM】中点击【前往 RAM 控制台】。

进入【用户】页面,点击【创建用户】。

RAM 用户建议这样创建:
- 登录名称填写
oss-image、shop-oss这类能看出用途的名称。 - 不勾选【使用控制台访问】。
- 如需生成 AccessKey,只用于系统服务调用 STS,不直接访问 OSS。

创建完成后立即复制并保存【AccessKey ID】和【AccessKey Secret】。

重点 3:密钥id / 密钥
【AccessKey ID】需要填写到我们系统【密钥id】。
【AccessKey Secret】需要填写到我们系统【密钥】。AccessKey Secret 页面关闭后无法再次查看。
注意:还需要给这个 RAM 用户授权系统策略【AliyunSTSAssumeRoleAccess】,否则系统获取 STS Token 会报
403 You are not authorized to do this action。
创建 RAM 角色时,信任主体按部署方式选择:

| 场景 | 选择 |
|---|---|
系统服务通过 RAM 用户调用 AssumeRole 获取 STS Token | 选择【云账号】,信任主体名称选择【当前云账号】。 |
| 系统部署在阿里云 ECS,并使用 ECS 实例 RAM 角色获取临时凭证 | 选择【云服务】,再选择对应云服务。 |
| 企业 SSO 或外部身份提供商接入 | 选择【身份提供商】,普通商城部署一般不用。 |
创建成功后进入角色详情页,复制并保存角色 ARN。

重点 4:Ram角色Arn
角色详情页中的 ARN 需要填写到我们系统【Ram角色Arn】。
示例:
acs:ram::1672608113458803:role/oss-images。
在角色【权限管理】中点击【新增授权】,资源范围选择【账号级别】,授权主体保持当前 RAM 角色,权限策略搜索 oss。

权限说明
快速验证可以选择【AliyunOSSFullAccess】。如果已选择【AliyunOSSFullAccess】,不需要再选择【AliyunOSSReadOnlyAccess】。
生产环境建议创建自定义权限策略,只授权当前 Bucket 的读写权限。
重点 5:StsEndPoint(地域节点)
STS 服务接入点需要填写到我们系统【StsEndPoint(地域节点)】。
Bucket 创建在哪个地域,就使用该地域对应的 STS Endpoint。填写时把示例中的
cn-guangzhou替换为 Bucket 所在地域的 RegionId。示例:Bucket 在华南 3(广州),RegionId 为
cn-guangzhou,填写https://sts.cn-guangzhou.aliyuncs.com。示例:Bucket 在华东 1(杭州),RegionId 为
cn-hangzhou,填写https://sts.cn-hangzhou.aliyuncs.com。
6. 配置 OSS 缩略图
进入 Bucket 左侧【数据处理】-【图片处理】,在【样式管理】中点击【导入样式】。
![]()
下载并导入缩略图规则文件:
点击下载 aliyun-oss-thumbnail-rules.txt。规则文件包含 100x100、300x300、400x400、800x800 四个样式。
导入完成后点击【访问设置】,开启自定义分隔符,选择 _。
![]()
缩略图说明
自定义分隔符必须选择
_,系统生成缩略图地址时会使用原图地址_样式名称。例如原图地址为
https://shoptnt.oss-cn-guangzhou.aliyuncs.com/shop/demo.png,300x300缩略图地址为https://shoptnt.oss-cn-guangzhou.aliyuncs.com/shop/demo.png_300x300。
7. 域名管理(推荐使用,可选)
如果图片需要在浏览器中直接预览,生产环境建议绑定自定义 HTTPS 域名或 CDN 域名。这样图片地址可以使用自己的域名,避免直接暴露 OSS 默认域名,也便于后续接入 CDN、证书和缓存策略。
进入 Bucket 左侧【Bucket 配置】-【域名管理】,点击【绑定域名】。

配置步骤:
- 准备一个图片访问域名,例如
img.example.com或static.example.com。 - 在 OSS【域名管理】中绑定该域名。
- 到域名 DNS 控制台添加 CNAME 解析,把图片域名指向 OSS 提示的 CNAME 地址。
- 等待域名状态变为已绑定或已生效。
- 在【HTTPS 证书】中上传或申请该域名的 HTTPS 证书,并开启 HTTPS 访问。
- 如果使用阿里云 CDN,先在 CDN 中添加加速域名,源站选择当前 OSS Bucket,再按 CDN 提示配置 CNAME。
域名说明
系统【EndPoint(地域节点)】仍填写 OSS Endpoint,用于系统上传文件和调用 OSS。
自定义域名或 CDN 域名用于浏览器访问图片。如果系统有单独的【访问域名】、【图片域名】或【文件域名】字段,填写自定义 HTTPS 域名,例如
https://img.example.com。如果系统没有单独的访问域名字段,上传后的图片地址通常仍会使用系统【EndPoint】生成;这种情况下要使用自定义域名,需要确认系统是否支持单独配置文件访问域名。
如果后期才把
http改成https,历史图片地址不会自动变化,需要重新上传或批量替换历史地址。
平台存储配置
进入【平台】-【设置】-【系统参数】-【存储方案】,找到【阿里云 OSS】并点击【修改】。
| 系统字段 | 填写说明 |
|---|---|
| Bucket名称(或储存空间) | 参考【重点 1】,填写上面创建的 Bucket 名称,例如 shoptnt。 |
| EndPoint(地域节点) | 参考【重点 2】,填写 OSS Endpoint,例如 https://oss-cn-guangzhou.aliyuncs.com。 |
| 二级路径 | 文件目录前缀,例如 shop/、goods/,不需要时可留空。 |
| 密钥id | 参考【重点 3】,填写 RAM 用户的 AccessKey ID,用于调用 STS。 |
| 密钥 | 参考【重点 3】,填写 RAM 用户的 AccessKey Secret,用于调用 STS。 |
| Ram角色Arn | 参考【重点 4】,填写 RAM 角色详情页中的 ARN,例如 acs:ram::1672608113458803:role/oss-images。 |
| StsEndPoint(地域节点) | 参考【重点 5】,按 Bucket 所在地域替换 RegionId,例如广州填写 https://sts.cn-guangzhou.aliyuncs.com。 |
保存后点击【开启】,上传一张图片测试。
验证与常见问题
| 现象 | 优先检查 |
|---|---|
获取 STS Token 报 AssumeRole 403 | RAM 用户是否授权【AliyunSTSAssumeRoleAccess】,RAM 角色 ARN 是否填写正确。 |
上传时报 XHR error (req "error") | Bucket 跨域 CORS 是否允许当前域名、POST、PUT 和请求头。 |
| 上传成功但图片打不开 | Bucket 是否公共读,图片 URL 是否使用公网或自定义 HTTPS 域名。 |
| 缩略图打不开 | OSS 图片样式是否导入成功,自定义分隔符是否选择 _。 |
三方存储配置
按下面顺序完成腾讯云控制台配置。标记为【重点】的内容,后面都需要填写到我们系统中。
| 系统字段 | 参考位置 |
|---|---|
| 存储桶 | 参考【重点 1】。 |
| 所属地域 | 参考【重点 2】。 |
| 访问域名 | 参考【重点 3】。 |
| SecretId | 参考【重点 4】。 |
| SecretKey | 参考【重点 4】。 |
1. 进入 COS 控制台
登录腾讯云 COS 控制台,进入【存储桶列表】。

图片说明:腾讯云 COS 控制台【存储桶列表】入口。
2. 创建存储桶
在【存储桶列表】中点击【创建存储桶】,地域选择离服务器或主要用户最近的地域。存储桶创建后,名称和地域不可修改。

图片说明:腾讯云 COS 创建存储桶页面,展示存储桶名称、所属地域和访问权限配置。
必要参数说明:
| 参数 | 建议 |
|---|---|
| 名称 | 填写业务可识别的名称。创建完成后,腾讯云会形成包含 APPID 的完整存储桶名称。 |
| 所属地域 | 创建后不可修改,建议选择离 API 服务器或主要用户最近的地域。 |
| 访问权限 | 图片需要浏览器直接访问时,建议选择【公有读私有写】。 |
| 多 AZ | 按预算选择,开启后通常不可修改。 |
重点 1:存储桶
创建完成后的完整存储桶名称需要填写到我们系统【存储桶】。
示例:
shoptnt-1251717206。注意不要只填写shoptnt,需要带上 APPID 后缀。识别方式:腾讯云 COS 存储桶完整名称通常是
自定义名称-APPID,页面上展示为shoptnt-1251717206这种格式。
重点 2:所属地域
存储桶所在地域需要填写到我们系统【所属地域】。
示例:访问域名中如果包含
cos.ap-guangzhou.myqcloud.com,系统【所属地域】填写ap-guangzhou;如果包含cos.ap-beijing.myqcloud.com,填写ap-beijing。
3. 配置访问域名
进入刚创建的存储桶,在【概览】页面下方【域名信息】-【访问域名】中查看默认访问域名。

图片说明:腾讯云 COS 存储桶概览页,展示【域名信息】-【访问域名】。
重点 3:访问域名
默认访问域名需要填写到我们系统【访问域名】。
示例:
https://shoptnt-1251717206.cos.ap-guangzhou.myqcloud.com。如果控制台页面看不到默认访问域名,也可以按
https://完整存储桶名称.cos.所属地域.myqcloud.com拼接。填写时只填域名,不要带文件目录。不要填写成
https://shoptnt-1251717206.cos.ap-guangzhou.myqcloud.com/shop/。【域名与传输管理】主要用于配置自定义域名或 CDN 域名。后续绑定后,系统【访问域名】可以改成自定义 HTTPS 域名,例如
https://cosimg.shoptnt.cn。
4. 配置访问权限
进入存储桶左侧【权限管理】-【存储桶访问权限】,确认访问权限为【公有读私有写】。

图片说明:腾讯云 COS 存储桶访问权限页面,展示【公有读私有写】配置。
安全提示
不要选择【公有读写】。公有读用于前端直接访问图片,公有写会带来安全风险。
如果公司要求私有桶,需要系统支持签名 URL 或临时密钥访问,否则浏览器直接访问图片会失败。
5. 配置跨域 CORS
前端直传 COS 前,需要给存储桶配置跨域规则。进入存储桶左侧【安全管理】-【跨域访问 CORS 设置】,点击【添加规则】。

图片说明:腾讯云 COS【跨域访问 CORS 设置】入口。
跨域规则建议按下表配置:
| 参数 | 测试环境 | 生产环境 |
|---|---|---|
| 来源 Origin | 可先填写 * 快速验证 | 填写商城前端域名,例如 https://www.example.com。 |
| 操作 Methods | 勾选 GET、POST、PUT、DELETE、HEAD | 至少需要 POST、PUT,建议保留 GET、HEAD。 |
| 允许 Headers | 填写 * | 可填写 *,稳定后再按实际请求头收紧。 |
| 暴露 Headers | 填写 ETag、x-cos-request-id | 填写 ETag、x-cos-request-id。 |
| 超时 Max-Age | 排查问题时可填 0 | 建议填 600 或更长。 |

图片说明:腾讯云 COS 跨域规则编辑页面,展示 Origin、Methods、Headers、Expose Headers 配置。
6. 创建 COS 自定义策略
进入腾讯云访问管理 CAM 控制台,选择【策略】-【新建自定义策略】-【按策略生成器创建】。

图片说明:腾讯云 CAM【策略】页面,点击【新建自定义策略】,选择【按策略生成器创建】。
按下面内容配置策略:
| 配置项 | 选择 | 说明 |
|---|---|---|
| 效果(Effect) | 允许 | 允许该子用户访问 COS。 |
| 服务(Service) | 对象存储(cos) | 搜索 COS 后选择【对象存储(cos)】。 |
| 操作(Action) | 全部操作(*) | 快速配置可选择全部操作;生产环境建议后续收敛到上传、读取、删除等必要操作。 |
| 资源(Resource) | 全部资源(*) | 快速配置可选择全部资源;生产环境建议限定到当前存储桶或当前目录。 |
| 条件(Condition) | 来源 IP | 可选。只允许固定 IP 调用时再勾选,填写服务器公网出口 IP 或公司固定公网 IP。 |

图片说明:策略生成器中选择服务为【对象存储(cos)】。

图片说明:策略生成器中配置 Service、Action、Resource、Condition。
来源 IP 说明
如果系统后端使用 SecretId/SecretKey 调用 COS,来源 IP 填服务器的公网出口 IP。
如果服务器公网 IP 不固定,或还不确定实际出口 IP,先不要配置来源 IP,避免上传时报无权限。
不要填写用户电脑或浏览器的 IP,浏览器访问图片依赖存储桶【公有读私有写】,不是依赖 CAM 密钥。
点击【下一步】,填写策略名称,例如 shoptnt-cos-upload-policy,完成创建。

图片说明:填写策略名称并完成自定义策略创建。
7. 创建 CAM 子用户并选择策略
进入【用户】-【用户列表】,点击【新建用户】,创建用于 COS 上传的子用户。不要直接使用主账号密钥。

图片说明:腾讯云 CAM【用户列表】页面,点击【新建用户】。
创建方式选择【自定义创建】,选择类型选择【可访问资源并接收消息】。

图片说明:新建子用户时选择【可访问资源并接收消息】。
填写用户名,例如 cos-image、shop-cos,访问方式勾选【编程访问】,用于生成 SecretId 和 SecretKey。控制台访问不是必须项,不需要后台登录腾讯云时可以不勾选。

图片说明:填写子用户名称,并勾选【编程访问】。
在【设置用户权限】中搜索刚才创建的策略名称,勾选该自定义策略。

图片说明:创建子用户时选择刚才创建的 COS 自定义策略。
请选择策略:
| 场景 | 选择 |
|---|---|
| 按本教程配置 | 搜索并勾选刚才创建的自定义策略,例如 shoptnt-cos-upload-policy。 |
| 先快速验证上传是否能跑通 | 可以临时搜索并勾选 QcloudCOSFullAccess。 |
| 正式生产环境 | 使用自定义策略,不建议长期使用 QcloudCOSFullAccess。 |
QcloudCOSFullAccess会授予全部 COS 权限,只建议测试时临时使用。生产环境建议使用上一步创建的自定义策略。
【设置用户标签】可不填,直接下一步;最后在【审阅信息和权限】中确认无误后点击【完成】。

图片说明:用户标签不是必填项,可直接下一步。
8. 获取 SecretId 和 SecretKey
子用户创建完成后,复制或下载保存 SecretId 和 SecretKey。

图片说明:腾讯云 CAM 子用户创建完成后,展示 SecretId 和 SecretKey。
重点 4:SecretId / SecretKey
【SecretId】需要填写到我们系统【SecretId】。
【SecretKey】需要填写到我们系统【SecretKey】。SecretKey 页面关闭后通常无法再次完整查看,需要立即复制保存。
9. 域名管理(推荐使用,可选)
如果图片需要使用自定义域名或 CDN 域名访问,进入存储桶左侧【域名与传输管理】,配置自定义源站域名或自定义 CDN 加速域名。

图片说明:腾讯云 COS【域名与传输管理】页面,展示自定义源站域名或自定义 CDN 加速域名配置。
配置步骤:
- 准备图片访问域名,例如
img.example.com或static.example.com。 - 如果只是换访问域名,添加【自定义源站域名】;如果需要 CDN 加速,添加【自定义 CDN 加速域名】。
- 到域名 DNS 控制台添加 CNAME 解析,指向腾讯云页面提示的 CNAME 地址。
- 等待域名状态变为【上线】或【生效】。
- 如果使用 HTTPS,绑定证书并开启 HTTPS 访问。
- 将我们系统【访问域名】改为自定义 HTTPS 域名,例如
https://cosimg.shoptnt.cn。 - 使用 CDN 加速域名时,如果上传或访问仍有跨域问题,还需要在 CDN 侧配置跨域响应头。
如果后期才把
http改成https,历史图片地址不会自动变化,需要重新上传或批量替换历史地址。
平台存储配置
进入【平台】-【设置】-【系统参数】-【存储方案】,找到【腾讯云 COS】并点击【修改】。
| 系统字段 | 填写说明 |
|---|---|
| 存储桶 | 参考【重点 1】,填写完整存储桶名称,例如 shoptnt-1251717206。 |
| 所属地域 | 参考【重点 2】,填写地域简称,例如 ap-guangzhou。 |
| 访问域名 | 参考【重点 3】,填写默认访问域名或自定义 HTTPS 域名。 |
| SecretId | 参考【重点 4】,填写 CAM 子用户的 SecretId。 |
| SecretKey | 参考【重点 4】,填写 CAM 子用户的 SecretKey。 |
| 二级路径 | 文件目录前缀,例如 shop/、goods/,不需要时可留空。 |
保存后点击【开启】,上传一张图片测试。
如果系统页面使用的是通用字段名,
EndPoint(地域节点)填 COS 访问域名,密钥 id填 SecretId,密钥填 SecretKey。
验证与常见问题
| 现象 | 优先检查 |
|---|---|
| 上传时报跨域错误 | COS 跨域规则是否允许当前域名、POST、PUT 和请求头。 |
| 上传报无权限 | CAM 子用户是否已授权当前存储桶读写权限,SecretId 和 SecretKey 是否填写正确。 |
| 图片打不开 | 存储桶是否为公有读私有写,访问域名是否填写正确。 |
| 使用 CDN 后仍跨域 | CDN 侧是否也配置了跨域响应头。 |
三方存储配置
- 部署 MinIO 服务。部署方式可参考开启 MinIO。
- 准备两个访问地址:
- MinIO 服务地址:API 服务访问 MinIO 的内网地址,例如
http://192.168.1.10:9000。 - 外部访问地址:浏览器访问图片的地址,建议通过 Nginx 代理成 HTTPS 域名,例如
https://minio.example.com。
- MinIO 服务地址:API 服务访问 MinIO 的内网地址,例如
- 使用启动时配置的用户名和密码登录 MinIO 控制台。旧版部署参数通常为
MINIO_ACCESS_KEY和MINIO_SECRET_KEY。 - 在 MinIO 控制台创建 Bucket。
- 将 Bucket 访问策略设置为可公开读取,否则前端图片地址会访问失败。
- 如需缩略图,按部署文档配置 Nginx
image_filter,并让缩略图规则与系统商品设置中的尺寸保持一致。
平台存储配置
- 进入【平台】-【设置】-【系统参数】-【存储方案】。
- 找到【MinIO】,点击【修改】。
- 按 MinIO 信息填写参数:
- 用户名:填写 MinIO 访问用户名。
- 密码:填写 MinIO 访问密码。
- Bucket:填写 Bucket 名称。
- minIO 服务地址:填写 API 服务可访问的 MinIO 地址,例如
http://192.168.1.10:9000。 - 访问地址:填写浏览器可访问的外部地址,例如
https://minio.example.com。 - 二级路径:填写文件目录前缀,例如
shop、goods,不需要时可留空。
- 保存后点击【开启】。
- 上传一张商品图片测试,确认图片 URL 可以在浏览器直接访问。
如果 API 服务器无法访问 MinIO 内网地址,可以把【minIO 服务地址】也填写为外部访问地址,但需要确认外部地址允许 API 服务上传文件。
四、常见注意事项
- 同一时间只开启一个存储方案。
- 修改存储方案只影响新上传的文件,历史文件地址不会自动迁移。
- 小程序只支持 HTTPS 文件地址,存储访问地址必须配置 HTTPS。
- 视频文件较大时,建议确认网关、Nginx 和对象存储的上传大小限制均不小于系统允许值。
- 上传后复制图片地址到浏览器打开,是最快的连通性验证方式。