阿里云客户端直传三种方式
为了避免业务服务器中转文件,提供上传速度,阿里云 OSS 提供了三种客户端直传方式。
三种方式
1. 服务端生成STS临时访问凭证
STS(Security Token Service)阿里云提供的一种临时访问权限管理服务。
对于大部分上传文件的场景,建议您在服务端使用STS SDK获取STS临时访问凭证,然后在客户端使用STS临时凭证和OSS SDK直接上传文件。客户端能重复使用服务端生成的STS临时访问凭证生成签名,因此适用于基于分片上传大文件、基于分片断点续传的场景。需要注意的是,频繁地调用STS服务会引起限流,因此建议您对STS临时凭证做缓存处理,并在有效期前刷新。为了确保STS临时访问凭证不被客户端滥用,建议您为STS临时访问凭证添加额外的权限策略,以进一步限制其权限。
2. 服务端生成PostObject所需的签名和Post Policy
对于需要限制上传文件属性的场景,您可以在服务端生成PostObject所需的Post签名、PostPolicy等信息,然后客户端可以凭借这些信息,在一定的限制下不依赖OSS SDK直接上传文件。您可以借助服务端生成的PostPolicy限制客户端上传的文件,例如限制文件大小、文件类型。此方案适用于通过HTML表单上传的方式上传文件。需要注意的是,此方案不支持基于分片上传大文件、基于分片断点续传的场景。
3. 服务端生成PutObject所需的签名URL
对于简单上传文件的场景,您可以在服务端使用OSS SDK生成PutObject所需的签名URL,客户端可以凭借签名URL,不依赖OSS SDK直接上传文件。需要注意的是,此方案不适用于基于分片上传大文件、基于分片断点续传的场景。在服务端对每个分片生成签名URL,并将签名URL返回给客户端,会增加与服务端的交互次数和网络请求的复杂性。另外,客户端可能会修改分片的内容或顺序,导致最终合并的文件不正确。
跨域设置
前端直传
进入目标Bucket的数据安全 > 跨域设置,创建规则如下:
注意:暴露 Headers 一定要配置!
| 参数 | 配置值 | 说明 |
|---|---|---|
| 来源 | https://app.example.com |
确保只有该授权应用有权限制上传操作。 |
| 允许 Methods | PUT, POST |
PUT 或 POST 是执行上传操作必需的 HTTP 方法。 |
| 允许 Headers | * |
前端重传的安全性不依赖固定的 Authorization 头,而是由有时效性的临时签名 (STS 或预签名 URL)保障。使用 * 可兼容 SDK 携带的多种头部(如 x-oss-meta-*),简化配置且无安全风险。 |
| 暴露 Headers | ETag, x-oss-request-id |
|
| 缓存时间 | 600 |
上传操作频率相对较低,缓存 10 分钟既能减少预检,又能快速响应配置变更。 |
| 返回 Vary Origin | 勾选 | 为未来可能的多域名部署(如测试环境)做准备,避免 CDN 缓存污染。 |