全部產品
Search
文件中心

Object Storage Service:Browser.js追加上傳

更新時間:Nov 13, 2024

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