追加上傳是指通過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。