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

对象存储

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

若您想在下载对象时,设置下载对象的限制条件(对象 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

最近更新时间:2024.09.27 14:38:29
这个页面对您有帮助吗?
有用
有用
无用
无用