+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

阿里云对象存储 OSS Python 上传回调

OSS在完成简单上传(put_object和put_object_from_file)以及分片上传(complete_multipart_upload)时可以提供回调(Callback)给应用服务器。您只需要在发送给OSS的请求中携带相应的Callback参数,即可实现回调。 注意事项 + 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心。 + 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见Python初始化。 示例代码 在上传字符串时使用上传回调(callback),目标存储空间为examplebucket,上传的目标文件为examplefiles文件夹下的exampleobject.txt文件,具体代码如下。 ``` #-*- coding: utf-8 -*- import json import base64 import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider #从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) #yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 #填写Bucket名称。 bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket') #定义回调参数Base64编码函数。 def encode_callback(callback_params): cb_str = json.dumps(callback_params).strip() return oss2.compat.to_string(base64.b64encode(oss2.compat.to_bytes(cb_str))) #设置上传回调参数。 callback_params = {} #设置回调请求的服务器地址,例如http://oss-demo.aliyuncs.com:23450。 callback_params['callbackUrl'] = 'http://oss-demo.aliyuncs.com:23450' #(可选)设置回调请求消息头中Host的值,即您的服务器配置Host的值。 #callback_params['callbackHost'] = 'yourCallbackHost' #设置发起回调时请求body的值。 callback_params['callbackBody'] = 'bucket=${bucket}&object=${object}' #设置发起回调请求的Content-Type。 callback_params['callbackBodyType'] = 'application/x-www-form-urlencoded' encoded_callback = encode_callback(callback_params) #设置发起回调请求的自定义参数,由Key和Value组成,Key必须以x:开始。 callback_var_params = {'x:my_var1': 'my_val1', 'x:my_var2': 'my_val2'} encoded_callback_var = encode_callback(callback_var_params) #上传回调。 params = {'x-oss-callback': encoded_callback, 'x-oss-callback-var': encoded_callback_var} #填写Object完整路径和字符串。Object完整路径中不能包含Bucket名称。 result = bucket.put_object('examplefiles/exampleobject.txt', 'a'*1024*1024, params) ```
我的笔记