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中的hashlib和base64加密模块使用实例
Sep 02 Python
Django中使用group_by的方法
May 26 Python
使用Python搭建虚拟环境的配置方法
Feb 28 Python
python最长回文串算法
Jun 04 Python
python高阶爬虫实战分析
Jul 29 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
python3多线程知识点总结
Sep 26 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
Jun 23 Python
win10+anaconda安装yolov5的方法及问题解决方案
Apr 29 Python
python实现会员信息管理系统(List)
Mar 18 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服务端图片生成缩略图的方法详解
2013/06/20 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
跟老齐学Python之变量和参数
2014/10/10 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
用Python写冒泡排序代码
2016/04/12 Python
Python打包可执行文件的方法详解
2016/09/19 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
Django 内置权限扩展案例详解
2019/03/04 Python
python提取log文件内容并画出图表
2019/07/08 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
Python 中如何写注释
2020/08/28 Python
机械设计职业生涯规划书
2013/12/27 职场文书
公司职员入党自传书
2015/06/26 职场文书
创业计划书之餐饮
2019/09/02 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
JavaScript中reduce()的用法
2022/05/11 Javascript
Java实现注册登录跳转
2022/06/16 Java/Android