简单上传是指通过put_object
方法上传单个文件(Object)。简单上传包括上传字符串、上传Bytes、上传Unicode字符、上传网络流和上传本地文件五种形式。
说明 关于上传文件的更多信息,请参见
PutObject。
注意事项
上传文件(Object)时,如果存储空间(Bucket)中已存在同名文件且用户对该文件有访问权限,则新添加的文件将覆盖原有文件。
上传文件时涉及填写的公共参数如下:
参数 | 说明 |
---|---|
bucket_name | Bucket名称。
Bucket名称的命名规范如下:
|
object_name | Object完整路径。Object完整路径中不能包含Bucket名称。
Object命名规范如下:
|
上传字符串
以下代码用于将字符串上传到目标存储空间examplebucket中的exampleobject.txt文件。
# -*- coding: utf-8 -*- import oss2 # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret') # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # 填写Bucket名称。 bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket') # 上传文件。 # 如果需要在上传文件时设置文件存储类型(x-oss-storage-class)和访问权限(x-oss-object-acl),请在put_object中设置相关Header。 # headers = dict() # headers["x-oss-storage-class"] = "Standard" # headers["x-oss-object-acl"] = oss2.OBJECT_ACL_PRIVATE # 填写Object完整路径和字符串。Object完整路径中不能包含Bucket名称。 # result = bucket.put_object('exampleobject.txt', 'Hello OSS', headers=headers) result = bucket.put_object('exampleobject.txt', 'Hello OSS') # HTTP返回码。 print('http status: {0}'.format(result.status)) # 请求ID。请求ID是本次请求的唯一标识,强烈建议在程序日志中添加此参数。 print('request_id: {0}'.format(result.request_id)) # ETag是put_object方法返回值特有的属性,用于标识一个Object的内容。 print('ETag: {0}'.format(result.etag)) # HTTP响应头部。 print('date: {0}'.format(result.headers['date']))
上传Bytes
以下代码用于将Bytes上传到目标存储空间examplebucket中的exampleobject.txt文件。
# -*- coding: utf-8 -*- import oss2 # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret') # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # 填写Bucket名称。 bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket') # 填写Object完整路径和Bytes内容。Object完整路径中不能包含Bucket名称。 bucket.put_object('exampleobject.txt', b'Hello OSS')
上传Unicode字符
以下代码用于将Unicode字符上传到目标存储空间examplebucket中的exampleobject.txt文件。上传Unicode字符时,OSS会将Unicode字符自动转换为UTF-8编码的Bytes进行上传。
# -*- coding: utf-8 -*- import oss2 # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret') # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # 填写Bucket名称。 bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket') # 填写Object完整路径和Unicode字符。Object完整路径中不能包含Bucket名称。 bucket.put_object('exampleobject.txt', u'Hello OSS')
上传网络流
以下代码用于将网络流上传到目标存储空间examplebucket中的exampleobject.txt文件。OSS将网络流视为可迭代对象(Iterable),并以Chunked Encoding的方式上传。
# -*- coding: utf-8 -*- import oss2 import requests # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret') # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # 填写Bucket名称。 bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket') # requests.get返回的是一个可迭代对象(Iterable),此时Python SDK会通过Chunked Encoding方式上传。 # 填写网络流地址。 input = requests.get('http://www.aliyun.com') # 填写Object完整路径。Object完整路径中不能包含Bucket名称。 bucket.put_object('exampleobject.txt', input)
上传本地文件
以下代码用于将本地文件examplefile.txt上传到目标存储空间examplebucket中的exampleobject.txt文件。OSS将本地文件视为文件对象(File Object),上传时必须以二进制方式打开(例如rb模式)。
# -*- coding: utf-8 -*- import oss2 import os # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret') # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # 填写Bucket名称。 bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket') # 必须以二进制的方式打开文件。 # 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj: # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。 fileobj.seek(1000, os.SEEK_SET) # Tell方法用于返回当前位置。 current = fileobj.tell() # 填写Object完整路径。Object完整路径中不能包含Bucket名称。 bucket.put_object('exampleobject.txt', fileobj)
Python SDK还提供了更便捷的方法用于上传本地文件。
# 填写Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。 # 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 bucket.put_object_from_file('exampleobject.txt', 'D:\\localpath\\examplefile.txt')