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 图片验证码代码分享
Jul 04 Python
python抓取京东商城手机列表url实例代码
Dec 18 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
Python自动化构建工具scons使用入门笔记
Mar 10 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
讲解Python中的标识运算符
May 14 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
python中树与树的表示知识点总结
Sep 14 Python
python向图片里添加文字
Nov 26 Python
Python tkinter模版代码实例
Feb 05 Python
python将字典内容写入json文件的实例代码
Aug 12 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函数,php爱好者站推荐
2007/03/19 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
JS跨域总结
2012/08/30 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python抓取网页中链接的静态图片
2018/01/29 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
收银员的岗位职责范本
2014/02/04 职场文书
兴趣小组活动总结
2014/05/05 职场文书
国际贸易实训报告
2014/11/05 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
JavaScript实现优先级队列
2021/12/06 Javascript
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android