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 相关文章推荐
wxPython中文教程入门实例
Jun 09 Python
python实现可将字符转换成大写的tcp服务器实例
Apr 29 Python
利用python如何处理nc数据详解
May 23 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
解析目标检测之IoU
Jun 26 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
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
Django 开发环境配置过程详解
2019/07/18 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
python能做哪些生活有趣的事情
2020/09/09 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
竞选团支书演讲稿
2014/04/28 职场文书
科学育儿宣传标语
2014/10/08 职场文书
企业介绍信范文
2015/01/30 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
小学总务工作总结
2015/08/13 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
MySQL注入基础练习
2021/05/30 MySQL
python中pycryto实现数据加密
2022/04/29 Python