对象存储 下载对象

下载高性能桶中的一个对象(GET Object),支持通过 Range 下载指定字节范围。对高性能桶发起请求时,SDK 自动完成会话鉴权。

相关产品
对象存储 产品页,含版本规格、价格与购买入口。

一、注意事项

·下载到本地及断点续传见 Python SDK 下载到本地文件;临时授权下载见 Python SDK 预签名 URL。

·对象键末尾的 / 严格区分文件对象与目录对象,不做容错。类型不匹配按对象不存在处理,返回 404 NoSuchKey。

·下载目录对象时内容为空,Content-Length 为 0;目录对象不支持 Range,携带时返回 400 InvalidArgument。

·对象键不能包含独立的 . 或 .. 路径段。

·大文件下载可使用高级接口 download_file。多次请求(例如并发分块或续传下载)期间,请保持源文件对象不变。

·高性能桶不支持对象版本,传入 VersionId 会本地报错。

·下载属于数据面接口,SDK 使用 session 临时凭证签名。

二、方法原型

def get_object(self, Bucket, Key, KeySimplifyCheck=True, **kwargs)

三、参数说明

参数名称 参数描述 类型 是否必选
Bucket 高性能桶完整名称,格式为 <BucketName>-x–<APPID> string 是
Key 对象键(Object Key),即对象在桶中的完整路径 string 是
KeySimplifyCheck 对象键安全检查开关,请保持默认值 True bool 否
kwargs 可选请求参数,使用这篇列出的参数 dict 否

常用 kwargs:

参数名称 参数描述 类型 是否必选
Range 下载的字节范围,格式为 bytes=first-last string 否
ResponseContentType 设置响应中的 Content-Type string 否
ResponseContentDisposition 设置响应中的 Content-Disposition string 否

四、响应

返回值为字典,对象内容位于 Body(StreamBody)字段:

参数名称 参数描述 类型
Body 对象内容,StreamBody 类型,可获取文件流或直接下载到本地 StreamBody
响应头 dict 同时包含响应头部字段,如 ETag、Content-Length、Content-Range、Last-Modified、Content-Type 等 dict

Body 常用方法:

方法 描述
get_raw_stream() 获取原始流对象,可自行 read()
get_stream_to_file(local_file) 把对象内容直接写入本地文件

五、错误码

本接口遵循统一的错误响应和错误码,详情请参见 错误码文档。

六、实际案例

# -*- coding=utf-8 -*-import osfrom qcloud_cos import CosConfig, CosS3Client# 高性能桶经 VPC 内网 HTTP 80 端口接入,SDK 的网关 DNS 负载均衡也仅对 HTTP 请求生效;SDK 默认 https,此处需显式指定 http。config = CosConfig( Scheme='http', Region='ap-guangzhou', SecretId=os.environ['COS_SECRET_ID'], SecretKey=os.environ['COS_SECRET_KEY'], Token=os.environ.get('COS_SECURITY_TOKEN'), EnableRapidDomain=True)client = CosS3Client(config)bucket = 'examplebucket-x–1250000000'key = 'exampleobject.txt'# 读取对象内容。resp = client.get_object(Bucket=bucket, Key=key)body = resp['Body'].get_raw_stream().read()print('object content: %s' % body)# 下载到本地文件。resp = client.get_object(Bucket=bucket, Key=key)resp['Body'].get_stream_to_file('local_file.txt')# 只下载前 1KB。resp = client.get_object(Bucket=bucket, Key=key, Range='bytes=0-1023')print('Content-Range: %s' % resp.get('Content-Range'))

赞 (0)
上一篇 4天前
下一篇 4天前