为了避免业务服务器中转文件,提供上传速度,阿里云 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
  • ETag:是文件上传成功的第一标识,用于后续校验。
  • x-oss-request-id:若上传失败,前端可捕获此 ID,在寻求技术支持时提供,以便快速定位问题。
缓存时间 600 上传操作频率相对较低,缓存 10 分钟既能减少预检,又能快速响应配置变更。
返回 Vary Origin 勾选 为未来可能的多域名部署(如测试环境)做准备,避免 CDN 缓存污染。