切换主题
☁️ 阿里云对象存储(OSS)
阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,支持海量数据存储和高并发访问。
📋 配置示例
yaml
files:
- business-type: demo
file-type: oss
business-folder: demo-files
http-access-path: https://cdn.example.com
access-key-id: LTAI5tXXXXXXXXXXXXXX
access-key-secret: xxxxxxxxxxxxxxxxxxxxxxxx
bucket: my-bucket
endpoint: oss-cn-hangzhou.aliyuncs.com
max-size: 2GB
chunk-size: 10MB
allowed-upload-suffix: jpg,png,pdf,doc,docx,mp4
allow-delete: true1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
yaml
files:
# 视频文件
- business-type: video
file-type: oss
business-folder: videos
bucket: video-bucket
endpoint: oss-cn-hangzhou.aliyuncs.com
chunk-size: 10MB # 大文件使用较大分片
max-size: 5GB
allowed-upload-suffix: mp4,avi,mov,mkv
# 图片文件
- business-type: image
file-type: oss
business-folder: images
bucket: image-bucket
endpoint: oss-cn-hangzhou.aliyuncs.com
chunk-size: 2MB # 小文件使用较小分片
max-size: 10MB
allowed-upload-suffix: jpg,png,gif,webp1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
📝 参数说明
| 参数 | 必填 | 说明 | 示例 |
|---|---|---|---|
business-type | 是 | 业务类型标识 | demo |
file-type | 是 | 固定值:oss | oss |
business-folder | 否 | 业务文件夹前缀 | demo-files |
http-access-path | 是 | 文件访问域名(CDN或OSS域名) | https://cdn.example.com |
access-key-id | 是 | 阿里云AccessKey ID | LTAI5tXXXXXXXXXXXXXX |
access-key-secret | 是 | 阿里云AccessKey Secret | xxxxxxxxxxxxxxxx |
bucket | 是 | OSS存储空间名称 | my-bucket |
endpoint | 是 | OSS访问域名 | oss-cn-hangzhou.aliyuncs.com |
max-size | 否 | 单文件大小限制 | 2GB |
chunk-size | 否 | 分片上传大小(默认5MB) | 10MB |
allowed-upload-suffix | 否 | 允许的文件后缀(逗号分隔) | jpg,png,pdf |
allow-no-suffix | 否 | 是否允许无后缀文件 | false |
allow-delete | 否 | 是否允许删除 | true |
🚀 快速开始
步骤1: 创建OSS存储空间
- 登录 阿里云OSS控制台
- 点击 创建Bucket
- 配置Bucket信息:
- Bucket名称:全局唯一,如
my-app-files - 地域:选择就近地域,如
华东1(杭州) - 存储类型:标准存储(热点数据)
- 读写权限:私有(推荐)
- 版本控制:根据需要开启
- Bucket名称:全局唯一,如
- 点击确定创建
步骤2: 获取访问密钥
安全建议
强烈建议使用RAM子账号,不要使用主账号AccessKey!
- 访问 RAM访问控制
- 创建RAM用户:
- 用户名:如
file-server-user - 访问方式:选择 编程访问
- 用户名:如
- 授予权限:
- 添加权限:
AliyunOSSFullAccess(或自定义更细粒度权限)
- 添加权限:
- 创建AccessKey:
- 保存 AccessKey ID 和 AccessKey Secret
- ⚠️ Secret只显示一次,请妥善保存
步骤3: 配置CDN加速(可选但推荐)
- 在OSS控制台选择Bucket
- 点击 传输管理 > 域名管理
- 绑定自定义域名
- 开启CDN加速
- 配置HTTPS证书
- 将
http-access-path设置为CDN域名
🌍 地域列表
中国大陆
| 地域名称 | Region ID | Endpoint |
|---|---|---|
| 华东1(杭州) | cn-hangzhou | oss-cn-hangzhou.aliyuncs.com |
| 华东2(上海) | cn-shanghai | oss-cn-shanghai.aliyuncs.com |
| 华北1(青岛) | cn-qingdao | oss-cn-qingdao.aliyuncs.com |
| 华北2(北京) | cn-beijing | oss-cn-beijing.aliyuncs.com |
| 华北3(张家口) | cn-zhangjiakou | oss-cn-zhangjiakou.aliyuncs.com |
| 华北5(呼和浩特) | cn-huhehaote | oss-cn-huhehaote.aliyuncs.com |
| 华北6(乌兰察布) | cn-wulanchabu | oss-cn-wulanchabu.aliyuncs.com |
| 华南1(深圳) | cn-shenzhen | oss-cn-shenzhen.aliyuncs.com |
| 华南2(河源) | cn-heyuan | oss-cn-heyuan.aliyuncs.com |
| 华南3(广州) | cn-guangzhou | oss-cn-guangzhou.aliyuncs.com |
| 西南1(成都) | cn-chengdu | oss-cn-chengdu.aliyuncs.com |
中国香港及海外
| 地域名称 | Region ID | Endpoint |
|---|---|---|
| 中国香港 | cn-hongkong | oss-cn-hongkong.aliyuncs.com |
| 美国西部1(硅谷) | us-west-1 | oss-us-west-1.aliyuncs.com |
| 美国东部1(弗吉尼亚) | us-east-1 | oss-us-east-1.aliyuncs.com |
| 亚太东南1(新加坡) | ap-southeast-1 | oss-ap-southeast-1.aliyuncs.com |
| 亚太东南2(悉尼) | ap-southeast-2 | oss-ap-southeast-2.aliyuncs.com |
| 亚太东南3(吉隆坡) | ap-southeast-3 | oss-ap-southeast-3.aliyuncs.com |
| 亚太东南5(雅加达) | ap-southeast-5 | oss-ap-southeast-5.aliyuncs.com |
| 亚太东北1(东京) | ap-northeast-1 | oss-ap-northeast-1.aliyuncs.com |
| 欧洲中部1(法兰克福) | eu-central-1 | oss-eu-central-1.aliyuncs.com |
| 英国(伦敦) | eu-west-1 | oss-eu-west-1.aliyuncs.com |
📦 分片上传说明
工作原理
OSS分片上传使用阿里云的Multipart Upload功能:
- 初始化:调用
InitiateMultipartUpload获取UploadId - 上传分片:并发上传各个分片,每个分片有唯一的
PartNumber - 合并分片:调用
CompleteMultipartUpload完成上传
优势
- ✅ 断点续传:支持暂停和恢复
- ✅ 并发上传:多个分片同时上传,提升速度
- ✅ 大文件支持:最大支持48.8TB
- ✅ 成本优化:失败的分片可单独重传
- ✅ 无临时存储:直接上传到OSS,无需服务器临时存储
分片大小建议
| 文件类型 | 建议分片大小 | 说明 |
|---|---|---|
| 视频文件 | 10MB - 20MB | 大文件,使用较大分片 |
| 文档文件 | 5MB - 10MB | 中等文件 |
| 图片文件 | 2MB - 5MB | 小文件,使用较小分片 |
| 压缩包 | 10MB - 20MB | 大文件 |
分片大小限制
- 最小:100KB(除最后一个分片)
- 最大:5GB
- 最多分片数:10000
💡 最佳实践
1. 存储类型选择
| 存储类型 | 适用场景 | 访问延迟 | 成本 |
|---|---|---|---|
| 标准存储 | 热点数据、频繁访问 | 毫秒级 | 标准 |
| 低频访问 | 较少访问的数据(每月1-2次) | 毫秒级 | 较低 |
| 归档存储 | 长期归档(几乎不访问) | 需解冻(分钟级) | 最低 |
| 冷归档存储 | 极少访问的数据 | 需解冻(小时级) | 极低 |
2. 生命周期规则
自动转换存储类型,降低成本:
yaml
# 在OSS控制台配置生命周期规则
规则1: 30天后转为低频访问
规则2: 180天后转为归档存储
规则3: 365天后删除1
2
3
4
2
3
4
3. 性能优化
yaml
# 根据文件类型优化配置
files:
# 视频文件 - 大分片
- business-type: video
file-type: oss
chunk-size: 20MB
max-size: 10GB
bucket: video-bucket
# 图片文件 - 小分片
- business-type: image
file-type: oss
chunk-size: 2MB
max-size: 10MB
bucket: image-bucket1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
4. 安全配置
防盗链配置
在OSS控制台配置Referer白名单:
允许的Referer:
- https://www.example.com
- https://app.example.com
- 允许空Referer: 否1
2
3
4
2
3
4
访问控制
yaml
# 推荐配置
- Bucket权限: 私有
- RAM用户: 最小权限原则
- 访问方式: 通过应用服务器控制1
2
3
4
2
3
4
服务端加密
在OSS控制台开启服务端加密:
- 加密方式:OSS完全托管
- 加密算法:AES256
- 适用场景:敏感数据保护
5. CDN加速配置
nginx
# CDN回源配置示例
回源HOST: my-bucket.oss-cn-hangzhou.aliyuncs.com
回源协议: HTTPS
缓存规则:
- 图片文件(.jpg,.png): 缓存30天
- 视频文件(.mp4): 缓存7天
- 文档文件(.pdf): 缓存1天1
2
3
4
5
6
7
2
3
4
5
6
7
6. 跨域配置
在OSS控制台配置CORS规则:
xml
<CORSRule>
<AllowedOrigin>https://www.example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<ExposeHeader>ETag</ExposeHeader>
<MaxAgeSeconds>3600</MaxAgeSeconds>
</CORSRule>1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
❓ 常见问题
Q: 上传失败,提示AccessDenied?
A: 检查以下几点:
- AccessKey是否正确:确认ID和Secret无误
- RAM权限:确认用户有OSS操作权限
- Bucket权限:检查Bucket ACL设置
- 网络连接:确认能访问OSS Endpoint
- Endpoint正确性:确认地域和Endpoint匹配
解决步骤:
bash
# 测试网络连接
ping oss-cn-hangzhou.aliyuncs.com
# 检查RAM权限
# 在RAM控制台查看用户权限策略1
2
3
4
5
2
3
4
5
Q: 如何提高上传速度?
A: 优化建议:
- 选择就近地域:减少网络延迟
- 使用分片上传:大文件必须使用
- 调整分片大小:
- 网络好:10-20MB
- 网络差:5-10MB
- 并发上传:同时上传3-5个分片
- 检查带宽:确保网络带宽充足
- 使用内网Endpoint:ECS与OSS同地域时使用
内网Endpoint示例:
yaml
# 公网访问
endpoint: oss-cn-hangzhou.aliyuncs.com
# 内网访问(ECS同地域)
endpoint: oss-cn-hangzhou-internal.aliyuncs.com1
2
3
4
5
2
3
4
5
Q: 如何降低存储成本?
A: 成本优化策略:
- 使用低频访问存储:访问频率低的文件
- 配置生命周期规则:自动转换存储类型
- 定期清理无用文件:删除过期数据
- 开启图片处理:按需处理,不存储多个尺寸
- 使用CDN:减少OSS流量费用
- 压缩文件:减少存储空间
成本对比(华东1):
| 存储类型 | 存储费用 | 访问费用 |
|---|---|---|
| 标准存储 | 0.12元/GB/月 | 较低 |
| 低频访问 | 0.08元/GB/月 | 较高 |
| 归档存储 | 0.03元/GB/月 | 需解冻 |
Q: 分片上传失败如何处理?
A:
- 单个分片失败:自动重试该分片
- UploadId过期:重新初始化上传
- 网络中断:保存UploadId,继续上传剩余分片
- 清理未完成上传:
bash
# 在OSS控制台查看"碎片管理"
# 定期清理超过7天的未完成上传1
2
2
Q: 如何实现文件权限控制?
A:
- Bucket设为私有:不允许公开访问
- 通过应用服务器:验证用户权限后返回文件
- 使用签名URL:生成临时访问链接
- 设置过期时间:限制访问时效
签名URL示例:
go
// 生成1小时有效的签名URL
signedURL, err := bucket.SignURL(objectKey, oss.HTTPGet, 3600)1
2
2
Q: 如何监控OSS使用情况?
A:
- OSS控制台:查看存储量、流量、请求数
- 云监控:配置告警规则
- 日志服务:开启访问日志分析
- API监控:监控上传成功率
监控指标:
- 存储容量
- 上传/下载流量
- 请求次数
- 错误率
- 平均延迟
🔗 相关链接
📊 性能参考
| 指标 | 数值 |
|---|---|
| 单文件最大 | 48.8TB |
| 分片最大 | 5GB |
| 最大分片数 | 10000 |
| 并发连接 | 无限制 |
| 上传带宽 | 10Gbps |
| 可用性 | 99.995% |
| 数据持久性 | 99.9999999999% |