1. 阿里云OSS前端直传方案概述
在Web应用开发中,文件上传是一个常见需求。传统的文件上传方式需要先将文件上传到应用服务器,再由服务器转发到对象存储服务,这种方式存在带宽瓶颈和服务器负载问题。阿里云OSS前端直传方案通过STS临时凭证授权,让前端应用可以直接将文件上传到OSS,大幅提升了上传效率和系统可靠性。
这个方案的核心优势在于:
- 减轻服务器压力:文件流不经过业务服务器,节省带宽资源
- 提升上传速度:利用OSS分布式架构实现高速传输
- 安全性保障:通过STS临时凭证实现最小权限控制
- 成本优化:减少服务器中转产生的流量费用
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与配置
2.1 OSS Bucket基础配置
首先需要在阿里云控制台完成OSS Bucket的基础配置:
- 登录阿里云OSS控制台,点击"创建Bucket"
- 填写Bucket名称(全局唯一),选择与用户群体最近的地域
- 存储类型选择"标准存储",冗余策略根据业务需求选择
- 权限设置务必选择"私有",防止未授权访问
重要提示:生产环境一定要设置Bucket为私有权限,否则可能导致敏感数据泄露。
跨域(CORS)配置是前端直传的关键步骤:
- 进入Bucket的"权限管理 > 跨域设置"
- 添加跨域规则:
- 来源:填写业务域名(开发环境可暂时设置为*)
- 允许Methods:GET, POST, PUT, DELETE
- 允许Headers:*
- 暴露Headers:ETag, x-oss-request-id
- 缓存时间:3600秒
2.2 RAM角色与STS授权
为了实现安全的临时授权,需要配置RAM角色:
- 进入RAM访问控制台,创建新角色
- 选择"阿里云账号内角色",信任实体选择"阿里云服务"
- 关联AliyunOSSFullAccess策略(生产环境建议自定义更细粒度的权限)
- 记录角色ARN(格式如:acs:ram::1234567890:role/oss-upload-role)
3. 服务端STS凭证实现
服务端需要提供获取STS临时凭证的接口,以下是Node.js实现示例:
javascript复制const STS = require('ali-oss').STS;
const sts = new STS({
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessSecret'
});
app.get('/oss-sts', async (req, res) => {
try {
const token = await sts.assumeRole(
'acs:ram::1234567890:role/oss-upload-role',
null,
15 * 60, // 15分钟有效期
'session-name'
);
res.json({
code: 200,
data: {
accessKeyId: token.credentials.AccessKeyId,
accessKeySecret: token.credentials.AccessKeySecret,
securityToken:
