本教程旨在引见怎样运用七牛的Python SDK来疾速地举行文件上传,下载,处置惩罚,治理等事情。
学问预备
我们在上一篇文章内里简朴引见了一个无key文件的上传。发明了一个题目就是上传一个文件须要AccessKey
和SecretKey
,那末七牛是假如运用这一对密钥来保证上传端有权限上传文件上去
,而且照样上传到准确的空间的呢
?
题目标答案就在下面的两行代码:
auth = qiniu.Auth(accessKey, secretKey)
upToken = auth.upload_token(bucket, key=None)
我们看到,上面的代码的目标是为了获得upToken
这个值,那末我们把这个值打印出来看看究竟是什么。
ELUs327kxVPJrGCXqWae9yioc0xYZyrIpbM6Wh6o:dt1xDHLUrj4AjOK04I7XycVaQcI=:eyJzY29wZSI6ImlmLXBibCIsImRlYWRsaW5lIjoxNDE5NzY4NDM0fQ==
我晕,这一堆字符串究竟是什么意义呢?要相识这个字符串究竟是什么,我们假如不去看七牛的文档的话,就要拼视察力了,固然假如你想直接从文档内里找答案也是能够的,戳这里。
略加视察,我们就会发明上面所谓的上传凭据实际上是由三部份构成的,每一个部份之间用:
连接起来。
ELUs327kxVPJrGCXqWae9yioc0xYZyrIpbM6Wh6o
:dt1xDHLUrj4AjOK04I7XycVaQcI=
:eyJzY29wZSI6ImlmLXBibCIsImRlYWRsaW5lIjoxNDE5NzY4NDM0fQ==
看到了没有,假如你确切测试了方才的上传代码的话,你不难发明实在这个字符串的第一部份ELUs327kxVPJrGCXqWae9yioc0xYZyrIpbM6Wh6o
就是你的AccessKey
,而第二部份和第三部份彷佛都是以=
号末端的,搞顺序的看到=
号应当会有觉得吧,彷佛base64编码的尾部通常情况下是=
号。
好,不论是不是是,先用base64解码一下看看,须要注重的是,七牛的base64编码运用的是url平安的base64编码,所以须要注重一下,不过七牛的Python SDK内里已有相识码的要领了。用下面的代码:
#coding=utf-8
__author__ = 'jemy'
import qiniu
upToken = '''ELUs327kxVPJrGCXqWae9yioc0xYZyrIpbM6Wh6o:dt1xDHLUrj4AjOK04I7XycVaQcI=:eyJzY29wZSI6ImlmLXBibCIsImRlYWRsaW5lIjoxNDE5NzY4NDM0fQ=='''
parts = upToken.split(":")
print(qiniu.urlsafe_base64_decode(parts[1]))
print(qiniu.urlsafe_base64_decode(parts[2]))
我们解码的效果发明第二部份(parts[1])获得的解码效果是乱码(二进制的)。而第三部份的解码效果倒是:
{"scope":"if-pbl","deadline":1419768434}
好,太好了,下面就是搞清楚上面获得的这个JSON字符串究竟是什么意义就好了。到了这个田地,你不得不去看看七牛的文档了,这个scope
和deadline
究竟是什么东西。文档请戳这里。
固然了,我能够提早通知你一下,scope
在这个例子中就是空间称号,而deadline
则是一个UNIX时刻戳,示意的意义是这个上传凭据的逾期时刻,简朴来讲,过了这个点,你这个上传凭据就没用啦。
那末到这里,我们就要最先回复上面一最先提到的两个题目。
- 怎样校验开发者有权限上传文件到七牛的服务器?
- 怎样晓得开发者上传的文件究竟保留在那里?
经由上面的剖析,我们大抵晓得有两样东西七牛服务器是在文件上传的时刻会获得的,一个就是开发者的AccessKey
(上传凭据的第一部份),别的一个就是上传凭据的第三部份(看过文档你就晓得,这个部份叫做上传战略PutPolicy)。固然七牛服务器获得另有一个东西就是上传凭据的第二部份(url平安的base64解码效果为乱码,能够揣摸原内容为二进制数据),这部份数据七牛用来干吗呢?
答案就在:这里。
也就是说,我们要相识这个上传凭据究竟是怎样来的。
答案发表
我们这一节的重点就是回复上面提到的两个题目。
- 怎样校验开发者有权限上传文件到七牛的服务器?
- 怎样晓得开发者上传的文件究竟保留在那里?
在你相识了什么是上传战略(PutPolicy)和上传凭据(Upload Token)以后,你就可以够回复这两个题目了。
上传战略是什么?上传战略就是你营业服务器要设置的参数表,这个参数表内里会通知七牛的云存储服务器一些基础的上传信息和一些高等的上传信息。基础的上传信息包含,这个文件保留到哪一个空间,这个凭据什么时刻失效,上传的文件有大小或许范例的限定,上传完成你七牛给我的复兴内容花样等等,高等一点的上传信息包含,文件上传到七牛服务器以后,怎样和营业服务器交互,是运用重定向的体式格局照样回调的体式格局(就是七牛发送POST要求给营业服务器,POST要求的内容能够自定义),别的包含文件上传完成触发文件处置惩罚的参数也算是高等上传信息吧。
简朴一句话,你客户端上传什么东西,上传完成干吗要我营业服务器说了算。这个就是上传战略。
那末你上传战略有了,怎样给到七牛服务器呢?这个就要靠上传凭据了,由于七牛的上传客户端会把这个上传凭据放到HTTP的POST要求中发送给七牛服务器。
好,那为何不直接把上传战略给上传客户端送给七牛服务器呢?你认为营业服务器傻啊,它怎样可能用明文来给上传客户端,假如如许,不是随意什么人改改就可以向我的空间传文件了么?
这个时刻,AccessKey和SecretKey闪亮上台,它们俩在营业服务器端对上传战略做了不可逆的盘算(盘算体式格局你看了上面给的文档应当已晓得了)。然后生成了一个上传凭据给上传客户端,上传客户端拿着这个上传凭据去上传文件到七牛服务器。
七牛服务器的权限校验机制实在和营业服务器一样,依据传过来上传凭据解析出AccessKey(上传凭据的第一部份,七牛能够依据AccessKey查到对应的SecretKey),和第三部份上传战略(PutPolicy),然后运用和营业服务器一样的盘算体式格局,对上传战略做不可逆的盘算,然后将这个效果和上传凭据的第二部份做比较,雷同,申明凭据有用,差别就是无效。别的,还会依据上传战略内里的逾期时刻检测凭据是不是过了有用期,假如过了有用期,那好,不能用。
好了,到此为此,我们已处理了这一节开首的两个题目。