Package: nos-python3-sdk
NOS Python SDK实现了NOS对象操作接口，基于此SDK能方便快速地实现Python应用程序来使用NOS的对象存储服务。支持的功能对象操作接口Delete Object —— 删除一个对象Delete Multiple Objects —— 用一个HTTP请求删除同一个Bucket中的多个对象Get Object —— 读取对象内容Head Object —— 获取对象相关元数据信息List Objects —— 获取一个桶的对象列表Put Object —— 上传一个对象Put Object - Copy —— 拷贝一个对象Put Object - Move —— 桶内部move一个对象Upload —— 上传一个对象，根据文件大小选择使用Put Object或分块上传大对象分块操作接口Initiate Multipart Upload —— 初始化分块上传Upload Part —— 上传一个分块Complete Multipart Upload —— 完成分块上传Abort Multipart Upload —— 取消分块上传并删除已上传的分块List Parts —— 列出已上传的分块List Multipart Uploads —— 列出所有执行中的分块上传事件Multipart Upload —— 整合上述分块操作接口，分块上传对象接口实现在调用对象操作接口前需要生成一个nos.Client类的实例。且在调用操作接口时，都有可能抛出异常，可以使用`nos.exceptions.ServiceException`捕获nos服务器异常错误，使用`nos.exceptions.ClientException`捕获nos客户端异常错误。nos.Client对象实例化使用举例client = nos.Client(
    access_key_id="string",
    access_key_secret="string",
    transport_class=nos.transport.Transport,
    **kwargs
)参数说明access_key_id(string) – 访问凭证ID。当需要访问的桶属性为Public-read时，可以将该值设置成None。默认值为：None。access_key_secret(string) – 访问凭证密钥。当需要访问的桶属性为Public-read时，可以将该值设置成None。默认值为：None。transport_class(class) – 与NOS服务器进行数据传输的类型，类型中至少需要包含`perform_request`成员函数。默认值为：nos.transport.Transport。kwargs – 其他可选参数，如下。end_point(string) – 与NOS服务器进行数据传输、交互的服务器的主域名。默认为：nos-eastchina1.126.net。num_pools(integer) – HTTP连接池的大小。默认值为：16。timeout(integer) – 连接超时的时间，单位：秒。max_retries(integer) – 当得到HTTP 5XX的服务器错误的响应时，进行重试的次数。默认值为：2。enable_ssl(boolean) – 与NOS服务器进行数据传输、交互时，是否使用HTTPS。默认值为：False，默认使用HTTP。nos.Client可能引发的所有异常类型在程序运行过程中，如果遇到错误，Python SDK会抛出相应的异常。所有异常均属于NOSException类，其下分为两个子类：ClientException、ServiceException。在调用Python SDK接口的时候，捕捉这些异常并打印必要的信息有利于定位问题。ClientExceptionClientException包含SDK客户端的异常。比如，上传对象时对象名为空，就会抛出该异常。
ClientException类下有如下子类，用于细分客户端异常：类名抛出异常的原因InvalidBucketName传入的桶名为空InvalidObjectName传入的对象名为空FileOpenModeError出入的对象为文件且没有使用二进制文件方式打开XmlParseError解析服务端响应的XML内容失败SerializationError上传对象序列化失败ConnectionError连接服务端异常ConnectionTimeout连接服务端超时ServiceExceptionServiceException包含NOS服务器返回的异常。当NOS服务器返回4xx或5xx的HTTP错误码时，Python SDK会将NOS Server的响应转换为ServiceException。
ServiceException类下有如下子类，用于细分NOS服务器返回的异常：类名抛出异常的原因MultiObjectDeleteException批量删除对象时，存在部分对象无法删除BadRequestError服务端返回HTTP 400响应ForbiddenError服务端返回HTTP 403响应NotFoundError服务端返回HTTP 404响应MethodNotAllowedError服务端返回HTTP 405响应ConflictError服务端返回HTTP 409响应LengthRequiredError服务端返回HTTP 411响应RequestedRangeNotSatisfiableError服务端返回HTTP 416响应InternalServerErrorError服务端返回HTTP 500响应NotImplementedError服务端返回HTTP 501响应ServiceUnavailableError服务端返回HTTP 503响应nos.Client的使用和异常处理的示例代码try:
   resp = client.XXX(
       bucket=bucket,
       key=key
   )
except nos.exceptions.ServiceException as e:
   print (
       'ServiceException: %s\n'
       'status_code: %s\n'
       'error_type: %s\n'
       'error_code: %s\n'
       'request_id: %s\n'
       'message: %s\n'
   ) % (
       e,
       e.status_code,  # 错误http状态码
       e.error_type,   # NOS服务器定义错误类型
       e.error_code,   # NOS服务器定义错误码
       e.request_id,   # 请求ID，有利于nos开发人员跟踪异常请求的错误原因
       e.message       # 错误描述信息
   )
except nos.exceptions.ClientException as e:
   print (
       'ClientException: %s\n'
       'message: %s\n'
   ) % (
       e,
       e.message       # 客户端错误信息
   )对象操作接口Delete Object使用举例resp = client.delete_object(
    bucket="string",
    key="string"
)参数说明bucket(string) – 桶名。key(string) – 对象名。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240"
}返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。Delete Multiple Objects使用举例resp = client.delete_objects(
    bucket="string",
    keys=[
        "string1",
        "string2",
        ...
    ],
    quiet=True|False
)参数说明bucket(string) – 桶名。objects(list) – 待删除的对象名称列表。quiet(boolean) – 是否开启安静模式（安静模式不显示具体删除信息）。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "response": xml.etree.ElementTree()    # xml.etree.ElementTree类型对象
}返回值的`response`的字符形式可能如下：<?xml version="1.0" encoding="UTF-8"?>
<DeleteResult>
    <Deleted>
            <Key>1.jpg</Key>
    </Deleted>
    <Error>
            <Key>2.jpg</Key>
            <Code>AccessDenied</Code>
            <Message>Access Denied</Message>
    </Error>
    <Error>
            <Key>3.jpg</Key>
            <Code>NoSuchKey</Code>
            <Message>No Such Key</Message>
    </Error>
</DeleteResult>注意：下列各项通过xml.etree.ElementTree的成员函数获取具体值时，得到的均为字符串；目前标注的类型为原类型名称，需自行转换。Element描述DeleteResult多重删除的响应容器元素类型：容器Deleted已被成功删除的容器元素类型：容器父节点：DeleteResultKey已删除的对象键值类型：字符串父节点：Deleted，ErrorVersionId已删除的对象版本号类型：数字父节点：Deleted，ErrorError删除失败的对象版本号类型：容器父节点：DeleteResultCode删除失败返回的错误码类型：字符串父节点：ErrorMessage删除失败返回的详细错误描述类型：字符串父节点：Error返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。response(xml.etree.ElementTree) – 包含返回信息的xml对象。Get Object使用举例resp = client.get_object(
    bucket="string",
    key="string",
    **kwargs
)参数说明bucket(string) – 桶名。key(string) – 对象名。kwargs – 其他可选参数，如下。range(string) – 下载指定的数据块，Range Header参考RFC2616。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "content_length": 1024,
    "content_range": "0-1024/234564",
    "content_type": "application/octet-stream;charset=UTF-8",
    "etag": "3adbbad1791fbae3ec908894c4963870",
    "body": StreamingBody()
}返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。content_length(integer) – 返回的数据块的字节数。content_range(string) – 返回的数据块的范围。content_type(string) – 返回的数据块的类型。etag(string) – 对象的哈希值，反应对象内容的更改情况。body(StreamingBody) – 对象数据。Head Object使用举例resp = client.head_object(
    bucket="string",
    key="string"
)参数说明bucket(string) – 桶名。key(string) – 对象名。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "content_length": 1024,
    "content_type": "application/octet-stream;charset=UTF-8",
    "etag": "3adbbad1791fbae3ec908894c4963870",
    "last_modified": "Mon, 23 May 2016 16:07:15 Asia/Shanghai"
}返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。content_length(integer) – 返回的数据块的字节数。content_type(string) – 返回的数据块的类型。etag(string) – 对象的哈希值，反应对象内容的更改情况。last_modified(string) – 最近一次修改对象的时间。List Objects使用举例resp = client.list_objects(
    bucket="string",
    **kwargs
)参数说明bucket(string) – 桶名。kwargs – 其他可选参数。delimiter(string) – 分界符，用于做groupby操作。marker(string) – 字典序的起始标记，只列出该标记之后的部分。limit(integer) – 限定返回的数量，返回的结果小于或等于该值。取值范围：0-1000，默认：100prefix(string) – 只返回Key以特定前缀开头的那些对象。可以使用前缀把一个桶里面的对象分成不同的组，类似文件系统的目录一样。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "response": xml.etree.ElementTree()    # xml.etree.ElementTree类型对象
}返回值的`response`的字符形式可能如下：<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://doc.nos.netease.com/2012-03-01">
    <Name>dream</Name>
    <Prefix>user</Prefix>
    <MaxKeys>2</MaxKeys>
    <NextMarker>user/yao</NextMarker>
    <IsTruncated>true</IsTruncated>
    <Contents>
            <Key>user/lin</Key>
            <LastModified>2012-01-01T12:00:00.000Z</LastModified>
            <Etag>258ef3fdfa96f00ad9f27c383fc9acce</ Etag>
            <Size>143663</Size>
            <StorageClass>Standard</StorageClass>
    </Contents>
    <Contents>
            <Key>user/yao</Key>
            <LastModified>2012-01-01T12:00:00.000Z</LastModified>
            < Etag>828ef3fdfa96f00ad9f27c383fc9ac7f</ Etag>
            <Size>423983</Size>
            <StorageClass>Standard</StorageClass>
    </Contents>
</ListBucketResult>注意：下列各项通过xml.etree.ElementTree的成员函数获取具体值时，得到的均为字符串；目前标注的类型为原类型名称，需自行转换。元素描述Contents对象元数据，代表一个对象描述类型：容器父节点：ListBucketObjects子节点：Key，LastModified，Size，EtagCommonPrefixes只有当指定了delimiter分界符时，才会有这个响应类型：字符串父节点：ListBucketObjectsdelimiter分界符类型：字符串父节点：ListBucketObjectsDisplayName对象的拥有者类型：字符串父节点：ListBucketObjects.Contents.OwnerEtag对象的哈希描述类型：字符串父节点：ListBucketObjects.ContentsID对象拥有者的ID类型：字符串父节点：ListBucketObjects.Contents.OwnerIsTruncated是否截断，如果因为设置了limit导致不是所有的数据集都返回，则该值设置为true类型：布尔值父节点：ListBucketObjectsKey对象的名称类型：字符串父节点：ListBucketObjects.ContentsLastModified对象最后修改日期和时间类型：日期 格式：yyyy-MM-dd”T”HH:mm:ss.SSSZ父节点：ListBucketObjects.ContentsMarker列表的起始位置，等于请求参数设置的Marker值类型：字符串父节点：ListBucketObjectsNextMark下一次分页的起点类型：字符串父节点：ListBucketObjectsMaxKeys请求的对象个数限制类型：数字父节点：ListBucketObjectsName请求的桶名称类型：字符串父节点：ListBucketObjectsOwner桶拥有者类型：容器父节点：ListBucketObjects.contents | CommonPrefixes子节点：DisplayName|IDPrefix请求的对象的Key的前缀类型：字符串父节点：ListBucketObjectsSize对象的大小字节数类型：数字父节点：ListBucketObjects.contentsStorageClasss存储级别类型：字符串父节点：ListBucketObjects.contents返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。response(xml.etree.ElementTree) – 包含返回信息的xml对象。Put Object使用举例resp = client.put_object(
    bucket="string",
    key="string",
    body=serializable_object,
    **kwargs
)参数说明bucket(string) – 桶名。key(string) – 对象名。body(serializable_object) – 对象内容，可以是文件句柄、字符串、字典等任何可序列化的对象。kwargs – 其他可选参数。meta_data(dict) – 用户自定义的元数据，通过键值对的形式上报，键名和值均为字符串，且键名需以`x-nos-meta-`开头。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "etag": "fbacf535f27731c9771645a39863328"
}返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的id号。etag(string) – 对象的哈希值，反应对象内容的更改情况。Put Object - Copy使用举例resp = client.copy_object(
    src_bucket="string",
    src_key="string",
    dest_bucket="string",
    dest_key="string"
)参数说明src_bucket(string) – 来源对象的桶名。src_key(string) – 来源对象的对象名。dest_bucket(string) – 目标对象的桶名。dest_key(string) – 目标对象的对象名。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240"
}返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。Move Object使用举例resp = client.move_object(
    src_bucket="string",
    src_key="string",
    dest_bucket="string",
    dest_key="string"
)参数说明src_bucket(string) – 来源对象的桶名。src_key(string) – 来源对象的对象名。dest_bucket(string) – 目标对象的桶名。dest_key(string) – 目标对象的对象名。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240"
}返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。Upload使用举例try:
    client.upload(
        bucket="string",
        key="string",
        body=serializable_object,
        progress_callback=lambda x, y: {
            print('upload progress, uploaded_bytes:', x, ', total_bytes:', y)
        },
        **kwargs
    )
except Exception as e:
    logging.exception(e)参数说明bucket(string) – 桶名。key(string) – 对象名。body(serializable_object) – 对象内容，可以是文件句柄、字符串、字典等任何可序列化的对象。kwargs – 其他可选参数。meta_data(dict) – 用户自定义的元数据，通过键值对的形式上报，键名和值均为字符串，且键名需以`x-nos-meta-`开头。object_size(integer) – 对象大小，默认通过body获取。multipart_upload_threshold(integer) – 对象大小大于等于该值时，使用分块上传；小于该值时，使用Put Object。默认为100MB。slice_size(integer) – 在使用分块上传时，每个分块的大小。默认根据文件大小自动调整。progress_callback(integer, integer) – 上传进度回调函数，第一个参数是已经上传的文件大小（单位：byte），第二个参数是对象的总大小（单位：byte）。Initiate Multipart Upload使用举例resp = client.create_multipart_upload(
    bucket="string",
    key="string",
    **kwargs
)参数说明bucket(string) – 桶名。key(string) – 对象名。kwargs – 其他可选参数。meta_data(dict) – 用户自定义的元数据，通过键值对的形式上报，键名和值均为字符串，且键名需以`x-nos-meta-`开头。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "response": xml.etree.ElementTree()    # xml.etree.ElementTree类型对象
}返回值的`response`的字符形式可能如下：<?xml version="1.0" encoding="UTF-8"?>
<InitiateMultipartUploadResult>
    <Bucket>filestation</Bucket>
    <Key>movie.avi</Key>
    <UploadId>VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3S5tMnRzIHVwbG9hZA</UploadId>
</InitiateMultipartUploadResult>注意：下列各项通过xml.etree.ElementTree的成员函数获取具体值时，得到的均为字符串；目前标注的类型为原类型名称，需自行转换。元素描述InitiateMultipartUploadResult响应容器元素类型：容器子节点：Key，BucketKey对象的Key类型：字符串父节点：InitiateMultipartUploadResultBucket对象的桶类型：字符串父节点：InitiateMultipartUploadResultUploadId分块上传的ID，用这个ID来作为各块属于这个文件的标识类型：字符串父节点：InitiateMultipartUploadResult返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的id号。response(xml.etree.ElementTree) – 包含返回信息的xml对象。Upload Part使用举例resp = client.upload_part(
    bucket="string",
    key="string",
    part_num=2,
    upload_id="string",
    body=serializable_object
)参数说明bucket(string) – 桶名。key(string) – 对象名。part_num(integer) – 数据分块编码号（1-10000）。upload_id(string) – 数据上传标识号。body(serializable_object) – 对象内容，可以是文件句柄、字符串、字典等任何可序列化的对象。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "etag": "fbacf535f27731c9771645a39863328"
}返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的id号。etag(string) – 对象的哈希值，反应对象内容的更改情况。Complete Multipart Upload在将所有数据Part都上传完成后，必须调用Complete Multipart Upload API来完成整个文件的Multipart Upload。在执行该操作时，用户必须提供所有有效的数据Part的列表（包括part号码和ETAG）；NOS收到用户提交的Part列表后，会逐一验证每个数据Part的有效性。当所有的数据Part验证通过后，NOS将把这些数据part组合成一个完整的Object。
使用x-nos-Object-md5扩展头发送对象的MD5值，用作去重库的建立（Put Object使用Content-MD5建立对象去重库）。使用举例resp = client.complete_multipart_upload(
    bucket="string",
    key="string",
    upload_id="string",
    info=[
        {
            "part_num": 1,
            "etag": "string"
        },
        {
            "part_num": 2,
            "etag": "string"
        },
        ...
    ],
    **kwargs
)参数说明bucket(string) – 桶名。key(string) – 对象名。upload_id(string) – 数据上传标识号。info(list) – 所有有效的数据Part的列表（包括part号码和etag）kwargs – 其他可选参数，如下。object_md5(string) – 发送对象的md5值，用于后续去重。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "response": xml.etree.ElementTree()    # xml.etree.ElementTree类型对象
}返回值的`response`的字符形式可能如下：<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUploadResult xmlns="">
    <Location> filestation.nos.netease.com/movie.avi</Location>
    <Bucket>filestation </Bucket>
    <Key>movie.avi </Key>
    <ETag>"3858f62230ac3c915f300c664312c11f-9"</ETag>
</CompleteMultipartUploadResult>注意：下列各项通过xml.etree.ElementTree的成员函数获取具体值时，得到的均为字符串；目前标注的类型为原类型名称，需自行转换。元素描述Bucket新创建对象所在的桶类型：字符串父节点：CompleteMultipartUploadResultCompleteMultipartUploadResult响应容器元素类型：容器子节点：Location，Bucket，Key，ETagETag新创建的对象的Entity Tag类型：字符串父节点：CompleteMultipartUploadResultKey新创建对象的Key类型：字符串父节点：CompleteMultipartUploadResultLocation新创建的这个对象的资源定位URL类型：字符串父节点：CompleteMultipartUploadResult返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。response(xml.etree.ElementTree) – 包含返回信息的xml对象。Abort Multipart Upload使用举例resp = client.abort_multipart_upload(
    bucket="string",
    key="string",
    upload_id="string"
)参数说明bucket(string) – 桶名。key(string) – 对象名。upload_id(string) – 数据上传标识号。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240"
}返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。List Parts使用举例resp = client.list_parts(
    bucket="string",
    key="string",
    upload_id="string",
    **kwargs
)参数说明bucket(string) – 桶名。key(string) – 对象名。upload_id(string) – 数据上传标识号。kwargs – 其他可选参数，如下。limit(integer) – 限制响应中返回的记录个数。取值范围：0-1000，默认1000。part_number_marker(string) – 分块号的界限，只有更大的分块号会被列出来。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "response": xml.etree.ElementTree()    # xml.etree.ElementTree类型对象
}返回值的`response`的字符形式可能如下：<?xml version="1.0" encoding="UTF-8"?>
<ListPartsResult xmlns=" ">
    <Bucket>example-Bucket</Bucket>
    <Key>example-Object</Key>
    <UploadId>23r54i252358235332523f23 </UploadId>
    <Owner>
            <ID>75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
            <DisplayName>someName</DisplayName>
    </Owner>
    <StorageClass>STANDARD</StorageClass>
    <PartNumberMarker>1</PartNumberMarker>
    <NextPartNumberMarker>3</NextPartNumberMarker>
    <MaxParts>2</MaxParts>
    <IsTruncated>true</IsTruncated>
    <Part>
            <PartNumber>2</PartNumber>
            <LastModified>2010-11-10T20:48:34.000Z</LastModified>
            <ETag>"7778aef83f66abc1fa1e8477f296d394"</ETag>
            <Size>10485760</Size>
    </Part>
    <Part>
            <PartNumber>3</PartNumber>
            <LastModified>2010-11-10T20:48:33.000Z</LastModified>
            <ETag>"aaaa18db4cc2f85cedef654fccc4a4x8"</ETag>
            <Size>10485760</Size>
    </Part>
</ListPartsResult>注意：下列各项通过xml.etree.ElementTree的成员函数获取具体值时，得到的均为字符串；目前标注的类型为原类型名称，需自行转换。元素描述ListPartsResult列出已上传块信息类型：容器子节点：Bucket、Key、UploadId、Owner、StorageClass、PartNumberMarker、NextPartNumberMarker、MaxParts, IsTruncated、PartBucket桶的名称类型: String父节点: ListPartsResultKey对象的Key类型: String父节点: ListPartsResultUploadId分块上传操作的ID类型: String父节点: ListPartsResultID对象拥有者的ID类型: String父节点: OwnerDisplayName对象的拥有者.类型: String父节点: OwnerOwner桶拥有者的信息子节点：ID, DisplayName类型: 容器父节点: ListPartsResultStorageClass存储级别.类型: String父节点: ListPartsResultPartNumberMarker上次List操作后的Part number类型: Integer父节点: ListPartsResultNextPartNumberMarker作为后续List操作的part-number-marker类型: Integer父节点: ListPartsResultMaxParts响应允许返回的的最大part数目类型: Integer父节点: ListPartsResultIsTruncated是否截断，如果因为设置了limit导致不是所有的数据集都返回了，则该值设置为true类型: Boolean父节点: ListPartsResultPart列出相关part信息子节点:PartNumber, LastModified, ETag, Size类型: String父节点: ListPartsResultPartNumber识别特定part的一串数字类型: Integer父节点: PartLastModified该part上传的时间类型: Date父节点: PartETag当该part被上传时返回类型: String父节点: PartSize已上传的 part数据的大小.类型: Integer父节点: Part返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。response(xml.etree.ElementTree) – 包含返回信息的xml对象。List Multipart Uploads使用举例：resp = client.list_multipart_uploads(
    bucket="string",
    **kwargs
)参数说明bucket(string) – 桶名。kwargs – 其他可选参数，如下。limit(integer) – 限制响应中返回的记录个数。取值范围：0-1000，默认1000。key_marker(string) – 指定某一uploads key，只有大于该key-marker的才会被列出。返回值举例{
    "x_nos_request_id": "17b21e42ac11000001390ab891440240",
    "response": xml.etree.ElementTree()    # xml.etree.ElementTree类型对象
}返回值的`response`的字符形式可能如下：<?xml version="1.0" encoding="UTF-8"?>
<ListMultipartUploadsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Bucket>Bucket</Bucket>
    <NextKeyMarker>my-movie.m2ts</NextKeyMarker>
    <Upload>
        <Key>my-divisor</Key>
        <UploadId>XMgbGlrZSBlbHZpbmcncyBub3QgaGF2aW5nIG11Y2ggbHVjaw</UploadId>
        <Owner>
            <ID>75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
            <DisplayName>OwnerDisplayName</DisplayName>
        </Owner>
        <StorageClass>STANDARD</StorageClass>
    </Upload>
    <Upload>
        <Key>my-movie.m2ts</Key>
        <UploadId>VXBsb2FkIElEIGZvciBlbHZpbcyBteS1tb3ZpZS5tMnRzIHVwbG9hZA</UploadId>
        <Owner>
            <ID>b1d16700c70b0b05597d7acd6a3f92be</ID>
            <DisplayName>OwnerDisplayName</DisplayName>
        </Owner>
        <StorageClass>STANDARD</StorageClass>
    </Upload>
</ListMultipartUploadsResult>注意：下列各项通过xml.etree.ElementTree的成员函数获取具体值时，得到的均为字符串；目前标注的类型为原类型名称，需自行转换。元素描述ListMultipartUploadsResult响应容器元素类型：容器子节点：Bucket，KeyMarker，Upload，NextKeyMarker, ownerBucket对象的桶类型：字符串父节点：ListMultipartUploadsResultNextKeyMarker作为后续查询的key-marker类型：String父节点：ListMultipartUploadsResultIsTruncated是否截断，如果因为设置了limit导致不是所有的数据集都返回了，则该值设置为true类型:Boolean父节点: ListMultipartUploadsResultUpload类型：容器子节点：Key，UploadId父节点：ListMultipartUploadsResultKey对象的Key类型：字符串父节点：UploadUploadId分块上传操作的ID类型String父节点：UploadID对象拥有者的ID类型: String父节点: OwnerDisplayName对象的拥有者类型: String父节点: OwnerOwner桶拥有者的信息类型：容器子节点：DisplayName|ID父节点：UploadStorageClass存储级别类型: String父节点: UploadInitiated该分块上传操作被初始化的时间类型:Date父节点: UploadListMultipartUploadsResult.Prefix当请求中包含了prefix参数时，响应中会填充这一prefix类型:String父节点: ListMultipartUploadsResult返回值说明
返回值为字典类型x_nos_request_id(string) – 唯一定位一个请求的ID号。response(xml.etree.ElementTree) – 包含返回信息的xml对象。Multipart Upload使用举例try:
    client.multipart_upload(
        bucket="string",
        key="string",
        body=serializable_object,
        progress_callback=lambda x, y: {
            print('upload progress, uploaded_bytes:', x, ', total_bytes:', y)
        },
        **kwargs
    )
except Exception as e:
    logging.exception(e)参数说明bucket(string) – 桶名。key(string) – 对象名。body(serializable_object) – 对象内容，可以是文件句柄、字符串、字典等任何可序列化的对象。kwargs – 其他可选参数。meta_data(dict) – 用户自定义的元数据，通过键值对的形式上报，键名和值均为字符串，且键名需以`x-nos-meta-`开头。object_size(integer) – 对象大小，默认通过body获取。slice_size(integer) – 分块大小，默认根据文件大小自动调整。progress_callback(integer, integer) – 上传进度回调函数，第一个参数是已经上传的文件大小（单位：byte），第二个参数是对象的总大小（单位：byte）。