You need to enable JavaScript to run this app.
导航

范围下载(Browser.js SDK)

最近更新时间2024.02.04 18:30:57

首次发布时间2022.07.25 14:32:29

如果您只需获取对象中的部分数据,您可以使用范围下载,下载指定范围内的数据,本文介绍如何进行范围下载。

注意事项

  • 为了避免在浏览器环境中暴露您的火山引擎账号密钥信息(即 AccessKey ID 和 AccessKey Secret),强烈建议您使用临时访问凭证的方式执行 TOS 相关操作,详细说明,请参见使用 STS 临时 AK/SK+Token 访问火山引擎 TOS
  • Endpoint 为 TOS 对外服务的访问域名。TOS 支持的 Endpoint 信息,请参见访问域名 Endpoint
  • 下载对象前,您必须具有 tos:GetObject 权限,详细信息,请参见权限配置指南
  • 对于开启多版本的桶,下载指定版本对象时,您必须具有 tos:GetObjectVersion 权限,详细信息,请参见权限配置指南
  • 如果应用程序会在同一时刻大量下载同一个对象,您的访问速度会受到 TOS 带宽及地域的限制。建议您使用 CDN 产品,提升性能的同时也能降低您的成本。通过 CDN 访问 TOS 的详细信息,请参见使用 CDN 加速访问 TOS 资源

示例代码

以下代码用于指定 Range 下载桶中对象的部分数据。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <button id="upload">上传</button>
    <button id="download">下载</button>
    <input id="file" type="file" />
    <!-- 导入 SDK 文件 -->
    <script src="https://tos-public.volccdn.com/obj/volc-tos-public/@volcengine/tos-sdk@latest/browser/tos.umd.production.min.js"></script>
    <script type="text/javascript">
      const client = new TOS({
        // yourRegion 填写 Bucket 所在地域。以华北2(北京)为例,yourRegion 填写为 cn-beijing。
        region: yourRegion,
        // 填写 endpoint 名称。
        endpoint: yourEndpoint,
        // 从 STS 服务获取的临时访问密钥(AccessKey ID 和 AccessKey Secret)。
        accessKeyId: yourAccessKey,
        accessKeySecret: yourSecretKey,
        // 从 STS 服务获取的安全令牌(SecurityToken)。
        stsToken: yourSecurityToken,
        // 填写 Bucket 名称。
        bucket: examplebucket,
      });
      const name = 'exampledir/range.txt';

      // 上传文件
      const upload = document.getElementById('upload');
      upload.addEventListener('click', async () => {
        // 从输入框获取 file 对象,例如 <input type="file" id="file" />。
        const data = document.getElementById('file').files[0];

        try {
          // 分片大小最小为 5MB
          const partSize = 5 * 1024 * 1024;

          await client.uploadFile({
            key: name,
            file: data,
            // 上传时指定分片大小
            partSize,
          });
        } catch (e) {
          console.log(e);
        }
      });

      const download = document.getElementById('download');
      download.addEventListener('click', async () => {
        try {
          const result = await client.getObjectV2({
            key: name,
            dataType: 'blob',
            // 指定下载范围
            headers: { Range: 'bytes=0-9' },
          });
          const blob = result.data.content;
          // 创建标签。
          const link = document.createElement('a');
          // 将标签绑定 href 属性。
          link.href = window.URL.createObjectURL(blob);
          // 指定下载后的本地文件名称。
          link.download = 'getobjectv2.txt';
          // 下载 Object。
          link.click();
          // 移除绑定的 URL。
          window.URL.revokeObjectURL(link.href);
        } catch (e) {
          console.log(e);
        }
      });
    </script>
  </body>
</html>