上一章节我们谈到了Tornado文件的上传和下载,那么对于我们来说服务器上传和下载小文件还行,遇到大文件基本就得放弃,租的服务器没有那么大的带宽和内存,因此一般都会借助第三方的存储,我用的是七牛云,免费的10G内存和不限制下载次数,非常适合学习使用。本章节记录python生成上传密钥,前端直接上传文件到七牛云,直接从七牛云下载文件,不经过自己的服务器。
一、去七牛云开通对象存储和创建bucket也就是存储空间名称。
两点需要注意,一个是访问控制,设置公开,这样用外链下载的时候无需去设置密钥,不然很麻烦,我个人认为如果你不是机密文件没必要验证,为了安全你也可以加密嘛,这样别人就猜不到你的文件名称了;另一个是空间名称,很重要
二、文件上传
这里我们需要获取上传的token,否则是非法的访问,是没办法上传的。
1、查看自己的ak,sk,这两个是用来生成token的
2、查看自己的空间所在地,从而确定发送地址,前端发送输入客户端
3、上前端代码,我们等会来测试一下,我的是华东区,客户端
<html>
<head>
<title></title>
</head>
<body>
<form method="post" action="http://upload.qiniu.com/" enctype="multipart/form-data">
key(filename):<input name="key" type="text" value=""><br>
token:<input name="token" type="text" value=""> <br>
<input name="file"type="file" />
<input type="submit" />
</form>
</body>
</html>
表单上传,传三个参数 一个是key 也就是文件名称;一个是token,一个是文件
4、python生成token的代码
from qiniu import Auth as qiniuAuth
# 得到七牛云的上传token ,需要传入key也就是文件名称
def get_qiniu_up_token(key):
# 七牛云密钥,写你自己的哦
access_key = 'xxxxxxxxxxxx'
secret_key = 'xxxxxxxxxxxx'
#构建鉴权对象
q = qiniuAuth(access_key, secret_key)
# officeat 就是空间名称 3600就是有效时间
token = q.upload_token('officeat', key, 3600)
return token
# 假设我的key是 22.jpg,等下上传文件的时候key也得是这个否则报错
print(get_qiniu_up_token('22.jpg'))
5、测试一下,生成的token
启动html然后填入数据
这是返回的数据
我们看看七牛云,已经上传成功
三、下载文件
我们在上传文件的时候是返回一个hash和key那个key配上外链域名即可下载,重要说明:这个空间是开放的这个我在之前就说过,否则你得申请下载权限,比较麻烦
1、找到我们的下载域名,七牛云免费给了一个 但30天之后就重新生成域名,但是还是免费的
2、下载文件,谷歌浏览器会将图片直接打开,因此会出现这样的现象。
http://q4jyy5i7v.bkt.clouddn.com/22.jpg
3、问题来了 你有没有发现如果别人知道你的外链域名,而你的文件名也就是key很规范的话,别人是可以猜到你的文件路径的,因此建议加上时间戳或者加密,别人很难猜解,真实文件名,建立表格保存即可。 之后大家就可以在tornado项目中添加这个功能了,写路由嘛。