本文介绍如何使用简单上传。

通过bucket.put_object方法上传文件。上传方法支持多种类型的输入源,输入源有如下几种类型:

类型 上传方式
字符串 直接上传
Bytes 直接上传
Unicode 自动转换为UTF-8编码的Bytes进行上传
本地文件 文件对象(File Object),必须以二进制方式打开(如“rb”模式)
网络流 可迭代对象(Iterable),以Chunked Encoding的方式上传
  • 上传字符串

    以下代码用于上传字符串:

    # -*- coding: utf-8 -*-
    import oss2
    
    # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
    # Endpoint以杭州为例,其它Region请按实际情况填写。
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
    
    # 返回值。
    result = bucket.put_object('<yourObjectName>', 'content of object')
    # HTTP返回码。
    print('http status: {0}'.format(result.status))
    # 请求ID。请求ID是请求的唯一标识,强烈建议在程序日志中添加此参数。
    print('request_id: {0}'.format(result.request_id))
    # ETag是put_object方法返回值特有的属性。
    print('ETag: {0}'.format(result.etag))
    # HTTP响应头部。
    print('date: {0}'.format(result.headers['date']))
    
  • 上传Bytes

    以下代码用于上传Bytes:

    # -*- coding: utf-8 -*-
    
    import oss2
    
    # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
    # Endpoint以杭州为例,其它Region请按实际情况填写。
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
    
    bucket.put_object('<yourObjectName>', b'content of object')
    
    
  • 上传Unicode

    以下代码用于上传Unicode:

    # -*- coding: utf-8 -*-
    import oss2
    
    # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
    # Endpoint以杭州为例,其它Region请按实际情况填写。
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
    
    bucket.put_object('<yourObjectName>', u'content of object')
    
  • 上传本地文件

    以下代码用于上传本地文件:

    # -*- coding: utf-8 -*-
    import oss2
    
    # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
    # Endpoint以杭州为例,其它Region请按实际情况填写。
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
    
    # 必须以二进制的方式打开文件,因为需要知道文件包含的字节数。
    with open('<yourLocalFile>', 'rb') as fileobj:
        # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。
        fileobj.seek(1000, os.SEEK_SET)
        # Tell方法用于返回当前位置。
        current = fileobj.tell()
        bucket.put_object('<yourObjectName>', fileobj)
    

    Python SDK还提供了一个更加便捷的方法用于上传本地文件:

    bucket.put_object_from_file('<yourObjectName>', '<yourLocalFile>')
    
  • 上传网络流

    以下代码用于上传网络流:

    # -*- coding: utf-8 -*-
    import oss2
    import requests
    
    # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
    # Endpoint以杭州为例,其它Region请按实际情况填写。
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
    
    # requests.get返回的是一个可迭代对象(Iterable),此时Python SDK会通过Chunked Encoding方式上传。
    input = requests.get('http://www.aliyun.com')
    bucket.put_object('<yourObjectName>', input)