in oss2/crypto_bucket.py [0:0]
def get_object(self, key,
byte_range=None,
headers=None,
progress_callback=None,
process=None,
params=None):
"""下载一个文件。
用法 ::
>>> result = bucket.get_object('readme.txt')
>>> print(result.read())
'hello world'
:param key: 文件名
:param byte_range: 指定下载范围。参见 :ref:`byte_range`
:param headers: HTTP头部
:type headers: 可以是dict,建议是oss2.CaseInsensitiveDict
:param progress_callback: 用户指定的进度回调函数。参考 :ref:`progress_callback`
:param process: oss文件处理,如图像服务等。指定后process,返回的内容为处理后的文件。
:param params: http 请求的查询字符串参数
:type params: dict
:return: file-like object
:raises: 如果文件不存在,则抛出 :class:`NoSuchKey <oss2.exceptions.NoSuchKey>` ;还可能抛出其他异常
"""
if process:
raise ClientError("Process object operation is not support for Crypto Bucket")
headers = http.CaseInsensitiveDict(headers)
self._init_user_agent(headers)
discard = 0
range_string = ''
if byte_range:
if byte_range[0] is None and byte_range[1]:
raise ClientError("Don't support range get while start is none and end is not")
start, end = self.crypto_provider.adjust_range(byte_range[0], byte_range[1])
adjust_byte_range = (start, end)
range_string = _make_range_string(adjust_byte_range)
if range_string:
headers['range'] = range_string
if byte_range[0] and adjust_byte_range[0] < byte_range[0]:
discard = byte_range[0] - adjust_byte_range[0]
logger.debug("adjust range of get object, byte_range: {0}, adjust_byte_range: {1}, discard: {2}".format(
byte_range, adjust_byte_range, discard))
logger.debug(
"Start to get object from CryptoBucket: {0}, key: {1}, range: {2}, headers: {3}, params: {4}".format(
self.bucket_name, to_string(key), range_string, headers, params))
resp = self._do('GET', self.bucket_name, key, headers=headers, params=params)
logger.debug("Get object done, req_id: {0}, status_code: {1}".format(resp.request_id, resp.status))
return GetObjectResult(resp, progress_callback, self.enable_crc, crypto_provider=self.crypto_provider,
discard=discard)