Portfolio
← 返回博客列表
存储桶(Bucket)

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-1us-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

图片处理的关键优势

  1. 只存一张原图,不需要手动生成多套尺寸
  2. CDN 边缘处理,在离用户最近的节点完成处理,速度快
  3. 零服务端代码,前端自己拼接 URL 就行
  4. 按需处理,访问时才生成,不浪费存储空间

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、自定义域名 │
└──────────────┴──────────────────────────────────┘