You need to enable JavaScript to run this app.
导航
限定条件下载(Python SDK)
最近更新时间:2024.09.27 14:38:29首次发布时间:2023.01.19 18:21:16

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

注意事项

  • 下载对象前,您必须具有 tos:GetObject 权限,具体操作,请参见权限配置指南
  • 对于开启多版本的桶,下载指定版本对象时,您必须具有 tos:GetObjectVersion 权限,具体操作,请参见权限配置指南
  • 如果应用程序会在同一时刻大量下载同一个对象,您的访问速度会受到 TOS 带宽及地域的限制。建议您使用 CDN 产品,提升性能的同时也能降低您的成本。通过 CDN 访问 TOS 的详细信息,请参见使用 CDN 加速访问 TOS 资源

限定条件说明

TOS 支持的限定条件如下。

参数

描述

如何设置

If-Match

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

if_match

If-Modified-Since

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

if_modified_since

If-None-Match

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

if_none_match

If-Unmodified-Since

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

if_unmodified_since

示例代码

以下代码用于限定条件下载桶 bucket-test 中对象 object-test

import datetime

import os
import tos

# 从环境变量获取 AK 和 SK 信息。
ak = os.getenv('TOS_ACCESS_KEY')
sk = os.getenv('TOS_SECRET_KEY')
endpoint = "your endpoint"
region = "your region"
bucket_name = "bucket-test"
# 对象名称,例如 example_dir 下的 example_object.txt 文件,则填写为 example_dir/example_object.txt
object_key = "object-test"

# 创建 TosClientV2 对象,对桶和对象的操作都通过 TosClientV2 实现
client = tos.TosClientV2(ak, sk, endpoint, region)

try:
    # 如果 if_modified_since=date 指定的时间早于Object实际修改时间,则正常下载Object,否则返回错误304 Not modified。
    date = datetime.datetime(2020, 12, 20)
    client.get_object(bucket_name, object_key, if_modified_since=date)

    # 如果if_unmodified_since指定的时间等于或者晚于Object实际修改时间,则正常下载Object,否则返回错误412 Precondition failed。
    date = datetime.datetime(2100, 12, 20)
    client.get_object(bucket_name, object_key, if_unmodified_since=date)

    # 如果传入的ETag和Object的ETag匹配,则正常下载Object,否则返回错误412 Precondition failed。
    etag = client.head_object(bucket_name, object_key).etag
    client.get_object(bucket_name, object_key, if_match=etag)

    # 如果if_none_match传入的ETag和Object的ETa不g匹配,则正常下载Object,否则返回错误304 Not modified。
    etag = 'DC21493F505BA3739562D8CC452C****'
    client.get_object(bucket_name, object_key, if_none_match=etag)
except tos.exceptions.TosServerError as e:
    # 不满足限定条件查询时,直接抛出 TosServerError 可通过e.status_code查看http状态码
    print('http err code', e.status_code)
    print('message', e.message)
    print('error with ec: {}'.format(e.ec))
    print('error with request url: {}'.format(e.request_url))
except Exception as e:
    print(e)

相关文档

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