You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
下载对象
限定条件下载(Harmony SDK)
复制全文
下载 pdf
限定条件下载(Harmony SDK)

您想在下载对象时,设置下载对象的限制条件(对象 ETag 或对象修改时间),您可使用 TOS Harmony SDK 提供的限定条件下载功能,当对象信息满足您指定条件时才下载对象。本文介绍如何通过限定条件下载对象。

注意事项

  • 下载对象前,您必须具有 tos:GetObject 权限,具体操作,请参见权限配置指南
  • 对于开启多版本的桶,下载指定版本对象时,您必须具有 tos:GetObjectVersion 权限,具体操作,请见权限配置指南
  • 如果应用程序会在同一时刻大量下载同一个对象,您的访问速度会受到 TOS 带宽及地域的限制。建议您使用 CDN 产品,提升性能的同时也能降低您的成本。通过 CDN 访问 TOS 的详细信息,请参见使用 CDN 加速访问 TOS 资源
  • 不同条件可以进行组合,例如:If-Modified-Since 和 If-Unmodified-Since 可以同时存在,If-Match 和 If-None-Match 也可以同时存在。
  • 可以通过使用 TOS Harmony SDK 的 headObject 接口获取对象 Etag 信息。

限定条件说明

参数

描述

If-Match

只有当传入的 ETag 与对象的 ETag 相等才返回对象,否则返回 412 Precondition Failed

If-None-Match

只有当传入的 ETag 与对象的 ETag 不相等才返回对象,否则返回 304 Not Modified

If-Modified-Since

只有在对象自指定时间以来被修改过时才返回该对象,否则返回 304 Not Modified

If-Unmodified-Since

只有在对象自指定时间以来未被修改过时才返回该对象,否则返回 412 Precondition Failed

示例代码

以下代码限定只下载自 2024-02-22 18:33:00 以来被修改过的对象。

import { TosClient, TosClientError, TosServerError } from '@volcengine/tos_harmonyos_sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: "Provide your ak", 
  accessKeySecret: "Provide your sk", 
  securityToken: 'Provide your securityToken',
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,"Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error: Error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

async function main() {
  const bucketName = 'node-sdk-test-bucket'; // 目标桶
  const objectName = 'example_dir/example.txt'; // 目标对象
  // 指定日期作为下载条件
  const date = new Date('2024-02-22 18:33:00');

  try {
    // 获取对象
    const res = await client.getObject({
      Bucket: bucketName,
      Key: objectName,
      IfModifiedSince: date,
    });

    // 满足限定条件时,读取对象
    res.Content.close();
  } catch (error) {
    if (error instanceof TosServerError) {
      // IfModifiedSince 不满足时,返回 304
      if (error.StatusCode === 304) {
        console.log('Object not modify, Request ID:', error.RequestId);
      } else {
        handleError(error as Error);
      }
    }
  }

  try {
    // 获取对象
    const res = await client.getObject({
      Bucket: bucketName,
      Key: objectName,
      IfUnmodifiedSince: date,
    });
    res.Content.close();
  } catch (error) {
    if (error instanceof TosServerError) {
      // IfUnmodifiedSince 不满足时,返回 412
      if (error.StatusCode === 412) {
        console.log('Object modify, Request ID:', error.RequestId);
      } else {
        handleError(error as Error);
      }
    }
  }
}
main();

相关文档

关于下载对象的 API 文档,请参见 GetObject

最近更新时间:2024.12.23 17:29:49
这个页面对您有帮助吗?
有用
有用
无用
无用