阿里云oss分片上传 跨域 etag
时间: 2025-01-03 11:33:54 浏览: 152
### 解决阿里云 OSS 分片上传时的跨域问题并确保 ETag 正确生成
#### 配置 CORS 规则以支持跨域请求
为了使前端能够顺利地向阿里云 OSS 发起分片上传请求,必须在 OSS 的存储桶上正确配置跨源资源共享(CORS)规则。这涉及到设置 `Access-Control-Allow-Origin`、`Access-Control-Allow-Methods` 和 `Access-Control-Allow-Headers` 头部信息[^1]。
具体来说:
- **Access-Control-Allow-Origin**: 设置为通配符 "*" 或者指定特定域名来允许来自哪些站点可以发起请求。
- **Access-Control-Allow-Methods**: 列举出被允许的方法列表,比如 POST, PUT 等方法对于分片上传至关重要。
- **Access-Control-Allow-Headers**: 包含必要的自定义头部字段,特别是当使用 STS Token 进行临时授权认证时所需的头部参数。
此外,还需要特别注意暴露响应中的 `Etag` 字段,因为它是验证各部分数据完整性的重要依据之一。因此应该添加 `Access-Expose-Headers: Etag` 来确保浏览器能接收到此值[^4]。
#### 实现分片上传流程
按照标准的分片上传逻辑执行如下操作:
1. 初始化一个多部分上传任务,并获得唯一的 UploadId;
2. 将大文件分割成多个较小的数据块;
3. 对每一个片段依次调用 PutPart 接口上传至服务器端,每完成一次都会得到相应的 ETag 值作为确认凭证;
4. 当全部片段均已成功提交完毕之后,则需发送 CompleteMultipartUpload 请求告知对象存储服务结束整个过程,并提供之前收集好的各个片段对应的编号及其关联的 ETag 给它以便于后续处理[^2]。
```javascript
// JavaScript 示例代码展示如何通过 SDK 执行上述步骤
const client = new OSS({
region: '<YourRegion>',
accessKeyId: 'your-access-key-id',
accessKeySecret: 'your-secret-key',
stsToken : 'security-token', // 如果适用的话
bucket: 'example-bucket'
});
async function uploadFile(file){
const initRes = await client.initMultipartUpload({key: file.name});
let parts = [];
for(let i=0; i<file.size/CHUNK_SIZE;i++){
const chunk = file.slice(i*CHUNK_SIZE,(i+1)*CHUNK_SIZE);
const res = await client.uploadPart({...initRes, partNumber:i+1,body:chunk});
parts.push({partNumber:i+1, etag:res.res.headers.etag});
}
await client.completeMultipartUpload({...initRes,parts})
}
```
阅读全文
相关推荐
















