>>> import oss2, time
>>> unix_time = int(time.time()) # 当前UNIX Time,设其值为 1449313829
>>> date_str = oss2.http_date(unix_time) # 得到 'Sat, 05 Dec 2015 11:10:29 GMT'
>>> oss2.http_to_unixtime(date_str) # 得到 1449313829
生成HTTP协议所需的日期(即HTTP Date)时,请使用 http_date , 不要使用 strftime 这样的函数。因为后者是和locale相关的。
比如,strftime 结果中可能会出现中文,而这样的格式,OSS服务器是不能识别的。
iso8601_to_unixtime 把ISO8601格式转换为Unix Time;date_to_iso8601 和 iso8601_to_date 则在ISO8601格式的字符串和
datetime.date之间相互转换。如
>>> import oss2
>>> d = oss2.iso8601_to_date('2015-12-05T00:00:00.000Z') # 得到 datetime.date(2015, 12, 5)
>>> date_str = oss2.date_to_iso8601(d) # 得到 '2015-12-05T00:00:00.000Z'
>>> oss2.iso8601_to_unixtime(date_str) # 得到 1449273600
class oss2.api.Bucket(auth, endpoint, bucket_name, is_cname=False, session=None, connect_timeout=None, app_name='', enable_crc=True)[source]
Bases: oss2.api._Base
用于Bucket和Object操作的类,诸如创建、删除Bucket,上传、下载Object等。
用法(假设Bucket属于杭州区域)
>>> import oss2
>>> auth = oss2.Auth('your-access-key-id', 'your-access-key-secret')
>>> bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'your-bucket')
>>> bucket.put_object('readme.txt', 'content of the object')
<oss2.models.PutObjectResult object at 0x029B9930>
auth (oss2.Auth) – 包含了用户认证信息的Auth对象
endpoint (str) – 访问域名或者CNAME
bucket_name (str) – Bucket名
is_cname (bool) – 如果endpoint是CNAME则设为True;反之,则为False。
session (oss2.Session) – 会话。如果是None表示新开会话,非None则复用传入的会话
connect_timeout (float) – 连接超时时间,以秒为单位。
app_name (str) – 应用名。该参数不为空,则在User Agent中加入其值。
注意到,最终这个字符串是要作为HTTP Header的值传输的,所以必须要遵循HTTP标准。
append_object(key,
position,
data,
headers=None,
progress_callback=None,
init_crc=None)[source]
追加上传一个文件。
Parameters:
- key (str) – 新的文件名,或已经存在的可追加文件名
- position (int) – 追加上传一个新的文件, position 设为0;追加一个已经存在的可追加文件, position 设为文件的当前长度。
position 可以从上次追加的结果 AppendObjectResult.next_position 中获得。
- data (str、bytes、file-like object或可迭代对象) – 用户数据
- headers (可以是dict,建议是oss2.CaseInsensitiveDict) – 用户指定的HTTP头部。可以指定Content-Type、Content-MD5、x-oss-开头的头部等
- progress_callback – 用户指定的进度回调函数。参考 上传下载进度
Returns:AppendObjectResult
Raises:如果 position 和当前文件长度不一致,抛出 PositionNotEqualToLength ;
如果当前文件不是可追加类型,抛出 ObjectNotAppendable ;
还会抛出其他一些异常
Parameters:
- key (str) – 待上传的文件名,这个文件名要和
init_multipart_upload() 的文件名一致。
- upload_id (str) – 分片上传ID
- parts (list of PartInfo <oss2.models.PartInfo>) – PartInfo列表。PartInfo中的part_number和etag是必填项。其中的etag可以从
upload_part() 的返回值中得到。
- headers (可以是dict,建议是oss2.CaseInsensitiveDict) – HTTP头部
Returns:PutObjectResult
Parameters:
- permission (str) – 指定Bucket的ACL。可以是oss2.BUCKET_ACL_PRIVATE(推荐、缺省)、oss2.BUCKET_ACL_PUBLIC_READ或是
oss2.BUCKET_ACL_PUBLIC_READ_WRITE。
- input –
BucketCreateConfig object
get_live_channel_history(channel_name)[source]
获取live channel中最近的最多十次的推流记录,记录中包含推流的起止时间和远端的地址
param str channel_name: 要获取最近推流记录的live channel的名称
return: GetLiveChannelHistoryResult
get_live_channel_stat(channel_name)[source]
获取live channel当前推流的状态
param str channel_name: 要获取推流状态的live channel的名称
return: GetLiveChannelStatResult
get_object(key, byte_range=None, headers=None, progress_callback=None, process=None)[source]
下载一个文件。
>>> result = bucket.get_object('readme.txt')
>>> print(result.read())
'hello world'
- key – 文件名
- byte_range – 指定下载范围。参见 指定下载范围
- headers (可以是dict,建议是oss2.CaseInsensitiveDict) – HTTP头部
- progress_callback – 用户指定的进度回调函数。参考 上传下载进度
- process – oss文件处理,如图像服务等。指定后process,返回的内容为处理后的文件。
Returns:
file-like object
Raises:
如果文件不存在,则抛出 NoSuchKey ;还可能抛出其他异常
get_object_meta(key)[source]
获取文件基本元信息,包括该Object的ETag、Size(文件大小)、LastModified,并不返回其内容。
HTTP响应的头部包含了文件基本元信息,可以通过 GetObjectMetaResult 的 last_modified,content_length,`etag` 成员获得。
get_object_to_file(key, filename, byte_range=None, headers=None, progress_callback=None, process=None)[source]
下载一个文件到本地文件。
- filename – 本地文件名。要求父目录已经存在,且有写权限。
- byte_range – 指定下载范围。参见 指定下载范围
- headers (可以是dict,建议是oss2.CaseInsensitiveDict) – HTTP头部
- progress_callback – 用户指定的进度回调函数。参考 上传下载进度
- process – oss文件处理,如图像服务等。指定后process,返回的内容为处理后的文件。
Returns:如果文件不存在,则抛出 NoSuchKey ;还可能抛出其他异常
head_object(key, headers=None)[source]
获取文件元信息。
HTTP响应的头部包含了文件元信息,可以通过 RequestResult 的 headers 成员获得。
>>> result = bucket.head_object('readme.txt')
>>> print(result.content_type)
text/plain
list_live_channel(prefix='', marker='', max_keys=100)[source]
列举出Bucket下所有符合条件的live channel
param: str prefix: list时channel_id的公共前缀
param: str marker: list时指定的起始标记
param: int max_keys: 本次list返回live channel的最大个数
return: ListLiveChannelResult
list_multipart_uploads(prefix='', delimiter='', key_marker='', upload_id_marker='', max_uploads=1000)[source]
罗列正在进行中的分片上传。支持分页。
- prefix (str) – 只罗列匹配该前缀的文件的分片上传
- delimiter (str) – 目录分割符
- key_marker (str) – 文件名分页符。第一次调用可以不传,后续设为返回值中的 next_key_marker
- upload_id_marker (str) – 分片ID分页符。第一次调用可以不传,后续设为返回值中的 next_upload_id_marker
- max_uploads (int) – 一次罗列最多能够返回的条目数
Returns:ListMultipartUploadsResult
- prefix (str) – 只罗列文件名为该前缀的文件
- delimiter (str) – 分隔符。可以用来模拟目录
- marker (str) – 分页标志。首次调用传空串,后续使用返回值的next_marker
- max_keys (int) – 最多返回文件的个数,文件和目录的和不能超过该值
Returns:ListObjectsResult
post_vod_playlist(channel_name, playlist_name, start_time=0, end_time=0)[source]
根据指定的playlist name以及startTime和endTime生成一个点播的播放列表
param str channel_name: 要生成点播列表的live channel的名称
param str playlist_name: 要生成点播列表m3u8文件的名称
param int start_time: 点播的起始时间,Unix Time格式,可以使用int(time.time())获取
param int end_time: 点播的结束时间,Unix Time格式,可以使用int(time.time())获取
Parameters:permission (str) – 新的ACL,可以是oss2.BUCKET_ACL_PRIVATE、oss2.BUCKET_ACL_PUBLIC_READ或
oss2.BUCKET_ACL_PUBLIC_READ_WRITE
put_live_channel_status(channel_name, status)[source]
更改live channel的status,仅能在“enabled”和“disabled”两种状态中更改
param str channel_name: 要更改status的live channel的名称
param str status: live channel的目标status
- 用法 ::
>>> bucket.put_object('readme.txt', 'content of readme.txt')
>>> with open(u'local_file.txt', 'rb') as f:
>>> bucket.put_object('remote_file.txt', f)
- key – 上传到OSS的文件名
- data (bytes,str或file-like object) – 待上传的内容。
- headers (可以是dict,建议是oss2.CaseInsensitiveDict) – 用户指定的HTTP头部。可以指定Content-Type、Content-MD5、x-oss-meta-开头的头部等
- progress_callback – 用户指定的进度回调函数。可以用来实现进度条等功能。参考 上传下载进度 。
Returns:
PutObjectResult
Parameters:
- key (str) – 文件名
- permission (str) – 可以是oss2.OBJECT_ACL_DEFAULT、oss2.OBJECT_ACL_PRIVATE、oss2.OBJECT_ACL_PUBLIC_READ或
oss2.OBJECT_ACL_PUBLIC_READ_WRITE。
Returns:RequestResult
put_object_from_file(key, filename, headers=None, progress_callback=None)[source]
上传一个本地文件到OSS的普通文件。
- key (str) – 上传到OSS的文件名
- filename (str) – 本地文件名,需要有可读权限
- headers (可以是dict,建议是oss2.CaseInsensitiveDict) – 用户指定的HTTP头部。可以指定Content-Type、Content-MD5、x-oss-meta-开头的头部等
- progress_callback – 用户指定的进度回调函数。参考 上传下载进度
Returns:PutObjectResult
- restore an object
如果是第一次针对该object调用接口,返回RequestResult.status = 202;
如果已经成功调用过restore接口,且服务端仍处于解冻中,抛异常RestoreAlreadyInProgress(status=409)
如果已经成功调用过restore接口,且服务端解冻已经完成,再次调用时返回RequestResult.status = 200,且会将object的可下载时间延长一天,最多延长7天。
如果object不存在,则抛异常NoSuchKey(status=404);
对非Archive类型的Object提交restore,则抛异常OperationNotSupported(status=400)
也可以通过调用head_object接口来获取meta信息来判断是否可以restore与restore的状态
代码示例::
>>> meta = bucket.head_object(key)
>>> if meta.resp.headers[‘x-oss-storage-class’] == oss2.BUCKET_STORAGE_CLASS_ARCHIVE:
>>> bucket.restore_object(key)
>>> while True:
>>> meta = bucket.head_object(key)
>>> if meta.resp.headers[‘x-oss-restore’] == ‘ongoing-request=”true”’:
>>> time.sleep(5)
>>> else:
>>> break
- channel_name – 直播频道的名称
- expires – 过期时间(单位:秒),链接在当前时间再过expires秒后过期
- playlist_name – 播放列表名称,注意与创建live channel时一致
- params – 需要签名的HTTP查询参数
Returns:签名URL。
sign_url(method, key, expires, headers=None, params=None)[source]
生成签名URL。
常见的用法是生成加签的URL以供授信用户下载,如为log.jpg生成一个5分钟后过期的下载链接:
>>> bucket.sign_url('GET', 'log.jpg', 5 * 60)
'http://your-bucket.oss-cn-hangzhou.aliyuncs.com/logo.jpg?OSSAccessKeyId=YourAccessKeyId\&Expires=1447178011&Signature=UJfeJgvcypWq6Q%2Bm3IJcSHbvSak%3D'
- method (str) – HTTP方法,如’GET’、’PUT’、’DELETE’等
- key – 文件名
- expires – 过期时间(单位:秒),链接在当前时间再过expires秒后过期
- headers (可以是dict,建议是oss2.CaseInsensitiveDict) – 需要签名的HTTP头部,如名称以x-oss-meta-开头的头部(作为用户自定义元数据)、
Content-Type头部等。对于下载,不需要填。
- params – 需要签名的HTTP查询参数
Returns:
签名URL。
update_object_meta(key,
headers)[source]
更改Object的元数据信息,包括Content-Type这类标准的HTTP头部,以及以x-oss-meta-开头的自定义元数据。
用户可以通过 head_object() 获得元数据信息。
upload_part(key, upload_id, part_number, data, progress_callback=None, headers=None)[source]
上传一个分片。
Parameters: