用七牛云存储实现博客图床(二)——制作上传工具

=== 本文所涉及工具的完整代码可以在我的GitHub上找到 ===

开搞

既然我们已经选择了七牛,那就开始吧。

关于怎么注册账号,建立空间这种事情这里就不介绍了,没有什么意义,我自己操作的时候也没记得有什么坑,如果有人有遇到问题可以在下面评论区留言

假如进展一切顺利,我们就在七牛有了一个bucket,这个bucket就是我们存储文件的空间了,在七牛控制台的内容管理界面可以添加上传文件。

pic1
pic2

呃。。必须吐槽一下,七牛在的后台文件管理实在是太乱了。。只能一下子列出所有文件,不能按照路径前缀来分类,搜索也不能模糊匹配,必须从路径前缀开始输入。而七牛的意思好像是不建议用户在直接在管理后台管理文件,所以提供了一个叫做QRSBox的工具,这是一个可以同步本地某个文件夹的客户端工具。如果要更多的功能就没有了,所以我以后还是想办法自己写一个工具来管理吧。

环境准备

先不扯那么远,我们先从上传开始。最近开始学习用Python,那我们就用肮脏的py来写吧(误)

先到七牛的文档中心找接口,找到Python的文档,嗯需要安装七牛的模块,直接用pip安装就行了。

这里就有坑了,windows用户会比较蛋疼,为了安装一个七牛模块,你可能需要安装pip这个包管理器,为了安装pip你还要安装setuptools。。GG。MacOS就很简单了,如果安装了homebrew,安装所有东西都只是几句话的事情。

所以对于Windows用户来说,最好的方法还是下载安装一个PyCharm,来自JetBrain的Python IDE,这里面自带pip,可视化安装各种模块。

pic3

这里我已经安装好了七牛,如果没有的话点右边的加号就能搜索到所有的Python模块,非常方便~

登陆七牛开发者平台,找到自己的Access Key和Secret Key,复制下来,除此之外还要准备好想上传存储空间的bucket名称,自定义域名外链前缀(比如我的是https://qn.inspoy.cc/)。现在我们已经有了4个字符串,OK把他们保存在一个文本文件中。

pic4

正片在这里

都准备万全之后开始编写代码,首先要先从这个文本文件中把数据读出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# load key
access_key = ''
secret_key = ''
bucket_name = ''
link_prefix = ''
key_file = open('key.txt')
key_lines = key_file.readlines()
for key_line in key_lines:
key_key = key_line[:key_line.find('=')]
key_val = key_line[key_line.find('=') + 1:]
key_val = key_val.replace('\r', '').replace('\n', '')
if key_key == 'access_key':
access_key = key_val
if key_key == 'secret_key':
secret_key = key_val
if key_key == 'bucket_name':
bucket_name = key_val
if key_key == 'link_prefix':
link_prefix = key_val

然后创建一个授权对象Auth,用来验证身份,当然不要忘了import七牛的模块

1
2
3
4
5
from qiniu import Auth
# other code
# initialize
q = Auth(access_key, secret_key)
# end

使用该授权对象去试图生成一个指定bucket的上传token

1
2
3
4
5
6
# key是bucket中的目标文件名
key = ''
# filepath是本地要上传的文件名
filepath = ''
token = q.upload_token(bucket_name)
ret, info = put_file(token, key, filepath, check_crc=True)

之后检查一下返回值ret的状态,确认上传过程是否成功,如果上传成功的话,info里会存储有本次上传操作的相关信息

1
2
3
assert ret['key'] == key
assert ret['hash'] == etag(localfile)
print(info)

注:ETag是七牛用来校验文件的哈希算法,具体请看这里

执行put_file()后,如果返回值正常,再访问七牛管理后台看看,是不是文件已经被上传上去了

接下来就是输入和结果的校验和GUI了,校验方法详见GitHub上的代码,GUI的话暂时选用了不用安装额外第三方模块的TkInter,虽然很简陋。。但是可以用((<ゝω·)☆)

最后的结果是这个样子的

pic5
pic6

这篇博客里的所有图片都是用这个工具上传的啦,由图可见,文件组织方式是按日期+原始文件名来的,为以防万一最好还是不要用中文,上传成功后会输出这个文件的外链,复制出来就能直接用啦~

本文所描述工具的完整源代码

又是喜闻乐见的广告时间

如果你觉得七牛云存储还不错可以一用的话,就用我的推广链接来注册吧~注册成功后我会获得每月5GB的流量←_←