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中使用NLTK库实现对词干的提取的教程
Apr 08 Python
使用Python编写简单的端口扫描器的实例分享
Dec 18 Python
Python 的描述符 descriptor详解
Feb 27 Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
Python实现屏幕截图的代码及函数详解
Oct 01 Python
python3中set(集合)的语法总结分享
Mar 24 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
Win8下python3.5.1安装教程
Jul 29 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
python中的 zip函数详解及用法举例
Feb 16 Python
教你使用TensorFlow2识别验证码
Jun 11 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判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
javascript tips提示框组件实现代码
2010/11/19 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
2016/03/13 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
python 调用HBase的简单实例
2016/12/18 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
Python Cookie 读取和保存方法
2018/12/28 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
乡镇庆八一活动方案
2014/02/02 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
2014年服务员工作总结
2014/11/18 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书