核心操作有哪些
S3 接口本质是一组面向桶和对象的 HTTP 请求:桶层面负责创建、列举与策略管理,对象层面负责上传、下载、探测、复制与删除。所有请求都要签名,服务端按签名者身份与策略判定是否放行。理解每个方法的语义是排查问题的前提:很多「上传成功但读不到」的现象,问题其实出在方法选错或路径写法不对。
基本信息
| 接口形式 | HTTP REST,请求需签名(常见为签名版本 4) |
|---|---|
| 桶级方法 | 创建、列举、删除、策略与配置管理 |
| 对象级方法 | PUT、GET、HEAD、DELETE、COPY |
| 认证方式 | 访问密钥对、临时凭证、预签名链接 |
方法语义速记
- PUT 桶:创建桶,桶名需全局唯一,重复创建返回冲突
- PUT 对象:整体写入,同名即覆盖,天然幂等适合重试
- GET 对象:返回数据与响应头,范围读取可只取部分字节
- HEAD 对象:只取元数据不传正文,用于探测存在与大小,成本远低于 GET
- DELETE 对象:在开启版本控制后是插入删除标记,而不是真的移除历史版本
命令行调用示例
命令行调用示例
aws s3api create-bucket --bucket demo-bucket --region ap-east-1 # 建桶需指定区域
aws s3api put-object --bucket demo-bucket --key logs/a.log --body ./a.log # 上传对象
aws s3api head-object --bucket demo-bucket --key logs/a.log # 探测存在与元数据
aws s3api list-objects-v2 --bucket demo-bucket --prefix logs/ --max-keys 100 # 分页列举
aws s3api delete-object --bucket demo-bucket --key logs/a.log # 删除(版本化下为删除标记)输出逐项读法
| 字段 | 含义 | 异常表现 |
|---|---|---|
| ETag | 对象标识,分片上传时不是整体校验和 | 与本地计算值不一致说明传输被改动 |
| Content-Length | 对象字节数 | 与实际不符说明写入未完成或被截断 |
| KeyCount | 本次列举返回数量 | 长期为零多为前缀或区域填错 |
| IsTruncated | 是否还有后续页 | 为真时必须按下一页标记继续取 |
请求构造要点
- 区域要与桶所在区域一致,跨区域访问会返回重定向或签名错误
- 签名要覆盖请求头与查询参数,改动任一字段都会导致签名不匹配
- 列举一定要处理分页,否则数据量大时只会拿到前一部分
- 大对象使用分片上传,断点续传与并行上传都依赖它
- 错误响应是结构化文档,读取其中的错误码比看 HTTP 状态更准确
HEAD 请求不传正文但会产生请求计数,用它替代 GET 做大规模存在性检查能显著降低带宽与成本。
不同实现对部分方法与扩展功能的支持程度不同,涉及具体参数与行为时以目标存储的官方文档为准。