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的*args和**kwargs用法
Nov 01 Python
Python中的choice()方法使用详解
May 15 Python
Python编程之多态用法实例详解
May 19 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
Python3处理HTTP请求的实例
May 10 Python
Django Celery异步任务队列的实现
Jul 24 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
Apr 21 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
Python实现AES加密,解密的两种方法
Oct 03 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
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
php curl的深入解析
2013/06/02 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
用vue写一个日历
2020/11/02 Javascript
python虚拟环境virualenv的安装与使用
2016/12/18 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
物业管理大学生个人的自我评价
2013/10/10 职场文书
幼儿园老师辞职信
2014/01/20 职场文书
粗加工管理制度
2014/02/04 职场文书
12月红领巾广播稿
2014/02/13 职场文书
联谊会主持词
2014/03/26 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
买房协议书范本
2014/10/23 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android