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切换hosts文件代码示例
Dec 31 Python
python3设计模式之简单工厂模式
Oct 17 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
用Python实现读写锁的示例代码
Nov 05 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
pytorch 更改预训练模型网络结构的方法
Aug 19 Python
Python实现数值积分方式
Nov 20 Python
Selenium 配置启动项参数的方法
Dec 04 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 Python
Python语言内置数据类型
Feb 24 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中fsockopen用法实例
2015/01/05 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
window.open的功能全解析
2006/10/10 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
简单的js表单验证函数
2013/10/28 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
微信小程序API—获取定位的详解
2019/04/30 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
Django 设置多环境配置文件载入问题
2020/02/25 Python
python实现126邮箱发送邮件
2020/05/20 Python
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
抽象类和接口的区别
2012/09/19 面试题
加工操作管理制度
2014/01/19 职场文书
探亲邀请信范文
2014/01/30 职场文书
小学教师培训感言
2014/02/11 职场文书
感恩节活动策划方案
2014/05/16 职场文书
啦啦队口号大全
2014/06/16 职场文书
技术经济专业求职信
2014/09/03 职场文书
大学生创业事迹材料
2014/12/30 职场文书
小学德育工作总结2015
2015/05/12 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
正则表达式拆分url实例代码
2022/02/24 Java/Android
把77A收信机改造成收音机
2022/04/05 无线电