Python的Django中将文件上传至七牛云存储的代码分享


Posted in Python onJune 03, 2016

最近在写的一个django小项目需要实现用户上传图片的功能,使用到了七牛云存储,特此记录下来。这里我使用的七牛python SDK 版本是7.0.3,函数使用上可能会与旧版有些不同。

原本文件上传需要先把文件上传到自己的业务服务器,再从业务服务器上传到云存储。现在七牛的表单上传可以直接把文件上传到七牛,不再需要业务服务器的中转,节省了流量成本,降低了业务服务器的压力。而且通过设置,还可以在文件上传完成后让客户端自动重定向到一个上传成功的结果页面。这里我就是使用了七牛的表单上传。

表单上传

用户上传图片的HTML表单代码如下。其中key用来指定图片保存在七牛中的文件名,token是上传凭证,即用来验证合法性和设置返回信息的。

upload.html

<form method="POST" action="http://upload.qiniu.com/" enctype="multipart/form-data">
<input name="key" type="hidden" value="">
<input name="token" type="hidden" value="">
<input name="file" type="file">
<input type="submit">
</form>

跳转到上面HTML页面的视图函数中的关键代码如下。其中upload_token函数用于生成表单里的token字段,upload_token函数中的7200代表上传凭证的有效期,returnUrl表示上传成功后的重定向地址,returnBody表示重定向时七牛返回的信息,它是一个base64编码后的json数据,需要解码获取json数据,当上传出错时错误信息直接在url中以明文的形式出现,并不会在返回的json数据里。通过设置mimeLimit还可以限制上传文件的类型。

views.py

import qiniu
import uuid
ACCESS_KEY = '七牛分配的公钥'
SECRET_KEY = '七牛分配的私钥'
BUCKET_NAME = '保存文件的仓库名'
key = str(uuid.uuid1()).replace('-', '') # 这里使用uuid作为保存在七牛里文件的名字。并去掉了uuid中的“-”
q = qiniu.Auth(ACCESS_KEY, SECRET_KEY)
token = q.upload_token(BUCKET_NAME, key, 7200, {'returnUrl':'http://127.0.0.1:8000/photos/uploadprocessor', 'returnBody': '{"name": $(fname), "key": $(key)}', 'mimeLimit':'image/jpeg;image/png'})
return render_to_response('photos/upload.html', {'token': token, 'key': key}, context_instance=RequestContext(request))
Python 相关文章推荐
python 运算符 供重载参考
Jun 11 Python
python利用matplotlib库绘制饼图的方法示例
Dec 18 Python
详解django中自定义标签和过滤器
Jul 03 Python
浅析使用Python操作文件
Jul 31 Python
Python语言描述连续子数组的最大和
Jan 04 Python
Python的UTC时间转换讲解
Feb 26 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
使用Keras构造简单的CNN网络实例
Jun 29 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
通过实例简单了解python yield使用方法
Aug 06 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 #Python
详解字典树Trie结构及其Python代码实现
Jun 03 #Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 #Python
Python中的descriptor描述器简明使用指南
Jun 02 #Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 #Python
深入理解Python变量与常量
Jun 02 #Python
Python中的Descriptor描述符学习教程
Jun 02 #Python
You might like
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
理解javascript定时器中的单线程
2016/02/23 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
Linux CentOS7下安装python3 的方法
2018/01/21 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
对python中的pop函数和append函数详解
2018/05/04 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
python自定义函数def的应用详解
2020/06/03 Python
django使用channels实现通信的示例
2020/10/19 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
本科生详细的自我评价
2013/09/19 职场文书
高中毕业生自我鉴定范文
2013/09/26 职场文书
营业经理岗位职责
2013/11/10 职场文书
教育实习生的自我评价分享
2013/11/21 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
林肯就职演讲稿
2014/05/19 职场文书
医院保洁员管理制度
2015/08/05 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
2019教师的学习计划
2019/06/25 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
MYSQL如何查看进程和kill进程
2022/03/13 MySQL