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程序中设置HTTP代理
Nov 06 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
python执行精确的小数计算方法
Jan 21 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
Django数据库操作之save与update的使用
Apr 01 Python
Python 添加文件注释和函数注释操作
Aug 09 Python
详解Python生成器和基于生成器的协程
Jun 03 Python
opencv检测动态物体的实现
Jul 21 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
Zerg剧情介绍
2020/03/14 星际争霸
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
JS中 用户登录系统的解决办法
2013/04/15 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
2016/10/27 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
python cumsum函数的具体使用
2019/07/29 Python
Python更换pip源方法过程解析
2020/05/19 Python
浅析Python 条件控制语句
2020/07/15 Python
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
酒店管理自荐信
2013/10/23 职场文书
户籍证明的格式
2014/01/13 职场文书
入学生会自荐书范文
2014/02/05 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
小班下学期个人总结
2015/02/12 职场文书
可怜妈妈观后感
2015/06/09 职场文书
师德师风培训感言
2015/08/03 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
详解MySQL主从复制及读写分离
2021/05/07 MySQL
4种方法python批量修改替换列表中元素
2022/04/07 Python
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技