追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。
注意事项
通过Browser.js SDK追加上传时,必须在Bucket跨域规则中暴露Headers:
x-oss-next-append-position
,否则无法正常获取追加位置nextAppendPosition
,导致上传失败。更多信息,请参见跨域设置。本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见初始化。
本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见新建OSSClient。
要追加上传,您必须有
oss:PutObject
权限。具体操作,请参见为RAM用户授权自定义的权限策略。当文件不存在时,调用AppendObject接口会创建一个追加类型文件。
当文件已存在时,调用AppendObject接口会出现以下几种情况:
如果文件为追加类型文件,且设置的追加位置和文件当前长度相等,则直接在该文件末尾追加内容。
如果文件为追加类型文件,但是设置的追加位置和文件当前长度不相等,则抛出PositionNotEqualToLength异常。
如果文件为非追加类型文件时,例如通过简单上传的文件类型为Normal的文件,则抛出ObjectNotAppendable异常。
示例代码
以下代码用于追加上传:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.17.1.min.js"></script>
</head>
<body>
<input type="file" id="file" />
<button id="upload">上传</button>
<script>
const upload = document.getElementById("upload");
const client = new OSS({
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。
region: 'yourRegion',
authorizationV4: true,
// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// 从STS服务获取的安全令牌(SecurityToken)。
stsToken: 'yourSecurityToken',
// 填写Bucket名称。
bucket: 'examplebucket'
});
upload.addEventListener("click", async () => {
const target = file.files[0];
// 填写Object完整路径,Object完整路径中不能包含Bucket名称,例如examplefile.txt。
// 第一次追加上传。返回值为下一次追加的位置。
const result = await client.append("examplefile.txt", target);
await client.append("123", result, {
// 第二次追加。后续追加的位置(position)是追加前文件的长度(Content-Length)。
position: result.nextAppendPosition,
});
});
</script>
</body>
</html>
相关文档
关于追加上传的完整代码示例,请参见GitHub示例。
关于追加上传的API接口说明,请参见AppendObject。