对象存储OSS使用Python语言实现签名Header上传的示例

对象存储OSS使用Python语言实现签名Header上传的示例

更新时间:2020-04-29 14:51:56

概述

对象存储OSS SDK提供了集成签名、上传和下载的SDK,但实际使用中,有时需要使用API的方式实现在签名的情况下进行上传和下载,本文以PutObject接口为例,提供了Python语言实现的示例。

说明:建议优先使用OSS提供SDK,本文提供的只是签名实现上传示例,实际使用中需要结合业务进行代码改动。

详细信息

Python 2.7使用PutObject接口实现示例代码如下。

# -*- coding: utf-8 -*-
import base64
import hmac
import sha
import urllib2
from datetime import datetime
accesskey = '您的accesskey';
accesskeysecret = '您的AccesskeySecret'
endpoint='oss-cn-hangzhou.aliyuncs.com'
bucket='您的bucket名称'
#您的上传文件路径
object='mytest/test.png'
GMT_FORMAT = '%a, %d %b %Y %H:%M:%S GMT'
time = datetime.utcnow().strftime(GMT_FORMAT)
print(time)
signature = hmac.new(accesskeysecret,
"PUT\n\nimage/png\n"+time+"\n"+"/"+bucket+"/"+object,sha)
Signature = base64.b64encode(signature.digest())
print("Signature: %s" % Signature)
opener = urllib2.build_opener(urllib2.HTTPHandler)
with open("/Users/wanghe/Documents/20190717101549.png") as f:
data=f.read()
request = urllib2.Request("http://"+bucket+"."+endpoint+"/"+object, data=data)
request.add_header("Authorization", "OSS "+accesskey+":"+Signature)
request.add_header("Content-Type", "image/png")
request.add_header("Date", time)
request.get_method = lambda:"PUT"
url = opener.open(request)

相关文档

若您需要使用对象存储OSS提供SDK,请参见OSS在Header中包含签名

适用于

  • 对象存储OSS