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中使用hashlib模块处理算法的教程
Apr 28 Python
深入解析Python中的WSGI接口
May 11 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
Python IDLE入门简介
Dec 08 Python
python timestamp和datetime之间转换详解
Dec 11 Python
python机器学习理论与实战(二)决策树
Jan 19 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
python对文件目录的操作方法实例总结
Jun 24 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
如何利用Python识别图片中的文字
May 31 Python
Django 构建模板form表单的两种方法
Jun 14 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:风雨欲来 路在何方?
2006/10/09 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php实现文件下载更能介绍
2012/11/23 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
使用正则替换变量
2007/05/05 Javascript
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
js表头排序实现方法
2015/01/16 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
Python的pygame安装教程详解
2020/02/10 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
实习生自我鉴定
2013/12/12 职场文书
大学生如何写自荐信
2014/01/08 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL