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中zip和unzip数据的方法
May 27 Python
简单实现python进度条脚本
Dec 18 Python
基于python内置函数与匿名函数详解
Jan 09 Python
Python实现定时精度可调节的定时器
Apr 15 Python
python 利用栈和队列模拟递归的过程
May 29 Python
python实现逐个读取txt字符并修改
Dec 24 Python
django框架模板语言使用方法详解
Jul 18 Python
Python内置类型性能分析过程实例
Jan 29 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
Python实现自动打开电脑应用的示例代码
Apr 17 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
python获取系统内存占用信息的实例方法
Jul 17 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实时显示输出
2008/10/02 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
Python获取任意xml节点值的方法
2015/05/05 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
Python中字典和集合学习小结
2017/07/07 Python
python实现K最近邻算法
2018/01/29 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
python在不同条件下的输入与输出
2020/02/13 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
教师师德教育的自我评价
2013/10/31 职场文书
努力学习演讲稿
2014/05/10 职场文书
触电现场处置方案
2014/05/14 职场文书
物理课外活动总结
2014/08/27 职场文书
建议书范文
2015/02/05 职场文书
教师工作能力自我评价
2015/03/04 职场文书
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL