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 相关文章推荐
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
python pandas中DataFrame类型数据操作函数的方法
Apr 08 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
详解python中的json和字典dict
Jun 22 Python
Python面向对象程序设计示例小结
Jan 30 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
python构造函数init实例方法解析
Jan 19 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
matplotlib图例legend语法及设置的方法
Jul 28 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
一个目录遍历函数
2006/10/09 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
总结一些js自定义的函数
2006/08/05 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
Python unittest单元测试框架总结
2018/09/08 Python
python dlib人脸识别代码实例
2019/04/04 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
python中如何写类
2020/06/29 Python
Python pip 常用命令汇总
2020/10/19 Python
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
简单说说tomcat的配置
2013/05/28 面试题
护士辞职信范文
2014/01/19 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫