
2026-08-11 · 阅读 6
存储桶(Bucket)
Bucket
目录
一、什么是对象存储?
传统文件系统使用目录树结构(文件夹套文件夹)来组织数据,而对象存储采用扁平化结构——所有的文件(称为"对象 Object")都放在"存储桶(Bucket)"里,通过唯一的 Key 来定位。
传统文件系统: 对象存储:
📁/ 🪣 my-bucket/
📁 images/ ├── images/avatar/user123.jpg (Object)
📁 avatar/ ├── images/2024/photo1.png (Object)
📄 user123.jpg ├── videos/lesson1.mp4 (Object)
📁 2024/ └── documents/report.pdf (Object)
📄 photo1.png
📁 videos/
📄 lesson1.mp4
对象存储的三个核心概念:
| 概念 | 说明 |
|---|---|
| Bucket(存储桶) | 对象的容器,类似"顶级文件夹",全局唯一命名 |
| Object(对象) | 存储的文件本身,包含数据 + 元数据(Meta) |
| Key(键) | 对象的唯一标识,类似文件路径,如 images/avatar/user123.jpg |
二、存储桶(Bucket)详解
存储桶是对象存储中最基本的组织单元,所有操作都围绕桶展开。
2.1 核心特性
- 全局唯一命名:桶名在整个系统中必须唯一(类似域名注册,先到先得)
- 扁平命名空间:桶内没有真正的"文件夹",通过 Key 的
/分隔符模拟目录层级 - 无限容量:单个桶可存储任意数量的对象
- 区域绑定:创建时需指定区域(Region),如
ap-southeast-1、us-east-1 - 两层权限控制:桶级别策略 + 对象级别 ACL
2.2 桶的典型配置
{
"name": "my-project-assets",
"region": "ap-southeast-1",
"acl": "private",
"cors": [
{
"allowedOrigins": ["https://myproject.com"],
"allowedMethods": ["GET", "PUT", "POST", "DELETE"],
"allowedHeaders": ["*"],
"maxAgeSeconds": 3600
}
],
"lifecycleRules": [
{ "prefix": "temp/", "expiration": { "days": 7 } }
]
}
CORS 配置非常重要:浏览器端直传文件时,S3 必须配置允许你的域名跨域访问,否则上传会被浏览器拦截。
2.3 图片处理能力
主流第三方云存储服务(阿里云 OSS、腾讯云 COS、七牛云、又拍云等)不只是"存文件的服务器",还在存储桶之上提供了实时数据处理能力。其中最常用的就是图片处理——只需存一张原图,通过 URL 参数动态实现缩放、裁剪、压缩、加水印等操作,零服务端代码。
核心原理:通过 URL 参数告诉存储服务你要怎么处理图片,服务端实时处理后返回结果。
原图 URL:
https://bucket.oss-cn-hangzhou.aliyuncs.com/images/photo.jpg
加参数 → 实时处理 → 返回处理后的图片
各厂商图片处理能力对比:
| 能力 | 阿里云 OSS | 腾讯云 COS | 七牛云 | 又拍云 |
|---|---|---|---|---|
| 缩放/裁剪 | 支持 | 支持 | 支持 | 支持 |
| 格式转换(webp/avif) | 支持 | 支持 | 支持 | 支持 |
| 质量压缩 | 支持 | 支持 | 支持 | 支持 |
| 文字水印 | 支持 | 支持 | 支持 | 支持 |
| 图片水印 | 支持 | 支持 | 支持 | 支持 |
| 缩略图 | 支持 | 支持 | 支持 | 支持 |
| 人脸识别裁剪 | 支持 | 支持 | 支持 | — |
URL 参数处理示例
缩放:
# 阿里云 OSS — 缩放到宽 200px,等比缩放
https://bucket.oss-cn-hangzhou.aliyuncs.com/photo.jpg?x-oss-process=image/resize,w_200
# 腾讯云 COS — 缩放到宽 200px
https://bucket.cos.ap-guangzhou.myqcloud.com/photo.jpg?imageMogr2/thumbnail/200x
裁剪:
# 从原图中心裁剪 300x300 的正方形
https://bucket.oss-cn-hangzhou.aliyuncs.com/photo.jpg?x-oss-process=image/crop,w_300,h_300,g_center
加水印:
# 文字水印,位置右下角
https://bucket.oss-cn-hangzhou.aliyuncs.com/photo.jpg?x-oss-process=image/watermark,text_SGVsbG8,type_d3F5Lmp5Zw,size_30,shadow_50,t_100,g_se
# 图片水印(用存储桶里另一张图片做水印)
https://bucket.oss-cn-hangzhou.aliyuncs.com/photo.jpg?x-oss-process=image/watermark,image_cGljL3dhdGVybWFyay5wbmc,type_d3F5Lmp5Zw,size_30,t_50,g_se
格式转换 + 压缩:
# 转为 webp 格式,质量 80
https://bucket.oss-cn-hangzhou.aliyuncs.com/photo.jpg?x-oss-process=image/format,webp/quality,q_80
组合操作(缩放 + 水印 + 转格式):
# 阿里云:先缩放,再加水印,最后转 webp
https://bucket.oss-cn-hangzhou.aliyuncs.com/photo.jpg?x-oss-process=image/resize,w_800/watermark,text_V0NBfg,type_d3F5Lmp5Zw,size_30,g_se/format,webp
前端封装使用
前端只需拼接 URL 即可,通常会封装为工具函数:
// utils/image.ts
const OSS_IMG_HOST = "https://your-bucket.oss-cn-hangzhou.aliyuncs.com"
export function ossImage(key, options) {
let url = `${OSS_IMG_HOST}/${key}`
const params = []
if (options?.width || options?.height) {
if (options.width && options.height) {
params.push(`image/resize,m_fill,w_${options.width},h_${options.height}`)
} else if (options.width) {
params.push(`image/resize,w_${options.width}`)
} else {
params.push(`image/resize,h_${options.height}`)
}
}
if (options?.format) params.push(`image/format,${options.format}`)
if (options?.quality) params.push(`image/quality,q_${options.quality}`)
if (params.length > 0) {
url += `?x-oss-process=${params.join("/")}`
}
return url
}
// 使用:不同场景使用不同尺寸
ossImage("images/avatar.jpg", { width: 100, format: "webp" }) // 头像 100px
ossImage("images/banner.jpg", { width: 1200, format: "webp" }) // 轮播图 1200px
ossImage("images/photo.jpg", { width: 400, quality: 80 }) // 列表图 400px
样式(Style)别名
如果某个尺寸组合经常使用,可以在存储桶控制台配置"样式",用短别名代替长参数:
# 配置样式 "thumb_200" 后
https://bucket.oss-cn-hangzhou.aliyuncs.com/photo.jpg~tpl_200x200.webp
# 等同于
https://bucket.oss-cn-hangzhou.aliyuncs.com/photo.jpg?x-oss-process=image/resize,w_200/format,webp
图片处理的关键优势:
- 只存一张原图,不需要手动生成多套尺寸
- CDN 边缘处理,在离用户最近的节点完成处理,速度快
- 零服务端代码,前端自己拼接 URL 就行
- 按需处理,访问时才生成,不浪费存储空间
2.4 更多能力
除了图片处理,存储桶还提供了丰富的数据处理与管理能力,使其成为一个文件存储 + 数据处理 + 内容分发的一体化平台。
媒体处理
| 能力 | 说明 | 典型场景 |
|---|---|---|
| 视频转码 | 将上传的视频转为不同分辨率/格式(H.264 → H.265、MP4 → HLS/m3u8) | 短视频平台、在线教育 |
| 视频截帧 | 从视频中提取某一帧作为封面图 | 视频列表封面 |
| 视频拼接/剪辑 | 通过参数裁剪视频时间段 | 视频预览片段 |
| 音频处理 | 转码、采样率调整、音频截取 | 播客、音乐平台 |
# 阿里云 OSS 视频转码示例
| **格式转换** | DOC → PDF、XLS → CSV 等 |
| **网页快照** | 将 HTML 转为 PDF 或图片存档 |
https://bucket.oss-cn-hangzhou.aliyuncs.com/video.mp4
?x-oss-process=video/transcode,c_10b/vod/resize,w_640
文档处理
| 能力 | 说明 |
|---|---|
| 文档预览 | 将 Word/Excel/PPT/PDF 转为图片或 HTML,在线预览无需下载 |
| 文字识别(OCR) | 从图片中提取文字 |
# 阿里云 OSS 文档预览
https://bucket.oss-cn-hangzhou.aliyuncs.com/report.docx
?x-oss-process=doc/preview,c_10,p_1
内容安全(审核)
| 能力 | 说明 |
|---|---|
| 图片鉴黄 | 自动识别涉黄/涉暴内容 |
| 文本审核 | 检测文本中的违规内容 |
| 人脸检测 | 检测图片中的人脸数量和位置 |
上传时或访问时自动触发审核,违规内容直接拦截或标记。
# 七牛云 图片审核
https://bucket.qiniucdn.com/photo.jpg?aviaudit=1
数据管理
| 能力 | 说明 |
|---|---|
| 生命周期管理 | 自动将冷数据转为低频存储/归档存储,或到期自动删除 |
| 跨区域复制 | 自动将数据同步到其他区域,做灾备 |
| 版本控制 | 保留文件的历史版本,误删可恢复 |
| 绑定自定义域名 | 用自己的域名替代 OSS 默认域名 |
事件通知
存储桶可以配置事件触发器,当文件上传、删除等操作发生时自动通知你的服务器:
用户上传文件 → S3 触发事件 → 通知你的服务器(HTTP 回调 / 消息队列)
典型应用:
- 上传图片后自动生成缩略图
- 上传视频后自动触发转码任务
- 上传完成后自动写入数据库
// AWS S3 事件通知配置
{
"LambdaFunctionConfigurations": [{
"Events": ["s3:ObjectCreated:*"],
"LambdaFunctionArn": "arn:aws:lambda:...",
"Filter": {
"Key": { "S3KeyFilter": { "FilterRules": [{ "Name": "prefix", "Value": "uploads/" }] } }
}
}]
}
访问与分发
| 能力 | 说明 |
|---|---|
| CDN 加速 | 绑定 CDN,全球就近访问,延迟更低 |
| 防盗链 | 通过 Referer 白名单/黑名单防止资源被盗用 |
| 签名 URL | 生成带有效期的临时访问链接,防止永久泄露 |
| Hotlink 保护 | 水印防盗——非自己域名访问时自动加水印 |
存储桶能力全景
┌─────────────────────────────────────────────────┐
│ 存储桶的能力 │
├──────────────┬──────────────────────────────────┤
│ 存储能力 │ 文件上传、下载、删除、版本控制 │
├──────────────┼──────────────────────────────────┤
│ 图片处理 │ 缩放、裁剪、压缩、水印、格式转换 │
├──────────────┼──────────────────────────────────┤
│ 媒体处理 │ 视频转码、截帧、音频处理 │
├──────────────┼──────────────────────────────────┤
│ 文档处理 │ 文档预览、格式转换、OCR │
├──────────────┼──────────────────────────────────┤
│ 内容安全 │ 鉴黄、文本审核、人脸检测 │
├──────────────┼──────────────────────────────────┤
│ 数据管理 │ 生命周期、跨区域复制、版本控制 │
├──────────────┼──────────────────────────────────┤
│ 事件驱动 │ 上传/删除事件通知(触发后端逻辑) │
├──────────────┼──────────────────────────────────┤
│ 访问控制 │ CDN加速、防盗链、签名URL、自定义域名 │
└──────────────┴──────────────────────────────────┘