Django学习之第三方储存服务器的使用
最近,越来越多的公司采用第三方储存来作为视频,图片的储存工具。
国内的像七牛,阿里云的OSS,国外的像亚马逊的S3,微软的azure都是非常有名的第三方储存。
下面以阿里的OSS为例,来介绍第三储存的使用:
1.安装python对OSS操作的模块
pip install oss2
2.再安装python对OSS储存的模块
pip install django-aliyun-oss2-storage
3.设置settings.py文件
# 使用OSS存储文件
DEFAULT_FILE_STORAGE = 'aliyun_oss2_storage.backends.AliyunMediaStorage' # 配置OSS信息
ACCESS_KEY_ID = "xxxxxxxxxxx"
ACCESS_KEY_SECRET = "xxxxxxxxxxx"
END_POINT = "oss-cn-shanghai.aliyuncs.com" # OSS存储节点
BUCKET_NAME = "xxx"
BUCKET_ACL_TYPE = "public-read" # private, public-read, public-read-write
MEDIA_ROOT是媒体文件的上传位置根目录,由于设置了BUCKET_NAME,一般在这个bucket中。所以设置为空字符串。
文件自然上传到Django模版的FileField字段设置的upload_to位置。
MEDIA_URL是获取媒体文件的链接前缀,可根据自己的oss文件链接位置添加。
由于上传的文件需要开放被用户下载,BUCKET_ACL_TYPE设置为公共的。若你的静态文件也需要上传到OSS中,设置如下:
# 设置上传的静态文件
STATICFILES_STORAGE = 'aliyun_oss2_storage.backends.AliyunStaticStorage'
解决文件名称乱码问题:
打开该包的源码文件backends.py,找到AliyunBaseStorage类的_save方法。修改如下:
def _save(self, name, content):
# 获得文件名
filename = str(content) # 设置header
headers = {}
headers['Content-Type'] = 'application/octet-stream'
headers['Content-Disposition'] = 'attachment; filename=%s' % filename # get oss' target name
name = self._get_target_name(name) content.open()
content_str = b''.join(chunk for chunk in content.chunks())
self.bucket.put_object(name, content_str, headers=headers) # add headers
content.close() return self._clean_name(name)
Django学习之第三方储存服务器的使用的更多相关文章
- Django学习系列11:在服务器中处理POST请求
之前的代码还没有为表单指定action=属性,因此提交表单默认返回之前渲染的页面,即“/”,这个由视图函数home_page处理.下面修改这个视图函数,让它能处理POST请求. 这意味着要为视图函数h ...
- Django学习笔记(9)—— 开发用户注册与登录系统
一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...
- Django学习笔记(4)——Django连接数据库
前言 在MVC或者MTV设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢?本小节就认真学习一下.首先复习一下Django的整个实现流程 ,然后再实现一下使用数据库的整个流程,最后学习一下 ...
- django学习笔记
django笔记----建立疾病预测系统的web应用 @buyizhiyou 工作环境:ubuntu16.04LTS+ ...
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB
JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...
- Django 学习笔记(二)
Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...
- Django 学习笔记(四)模板变量
关于Django模板变量官方网址:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.传入普通变量 在hello/Hell ...
- Django 学习笔记(三)模板导入
本章内容是将一个html网页放进模板中,并运行服务器将其展现出来. 平台:windows平台下Liunx子系统 目前的目录: hello ├── manage.py ├── hello │ ├── _ ...
- Django学习(4)表单,让数据库更美好
表单,在HTML中的标签为<form></form>,在网页中主要负责数据采集功能.我们在浏览网站时,常常会碰到注册账号.账号登录等,这就是表单的典型应用. 在Django学习 ...
随机推荐
- @requestBody注解的使用(下)
提示: 建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基本知识常 识,可选择性跳过. 说明: @RequestBody主要用来接 ...
- jvm-监控指令-jstat
格式: jstat -<option> <vmid> [<interval> [<count>]] 作用: 查看虚拟机各种运行状态信息. ...
- HashMap源码-使用说明部分
/* * Implementation notes. * 使用说明 * * This map usually acts as a binned (bucketed) hash table, but * ...
- Ubuntu 16.04通过APT源安装QUEM虚拟机调试Linux内核
安装: sudo apt-add-repository main sudo apt-get update sudo apt-get install qemu-kvm qemu virt-manager ...
- canvas的一些问题记录
canvas当被设置width时,原来绘制的内容,将会清空.
- Yii2系列教程六:集成编辑器
上一篇文章我们实现了简单的用户权限管理,至于更先进的RBAC,我后面会单独出一篇文章来说说.在这一篇文章当中,我主要想写的是在Yii2中集成一个编辑器,因为在我们的实际开发当中,一个简单的textar ...
- HBase 写优化之 BulkLoad 实现数据快速入库
在第一次建立Hbase表的时候,我们可能需要往里面一次性导入大量的初始化数据.我们很自然地想到将数据一条条插入到Hbase中,或者通过MR方式等.但是这些方式不是慢就是在导入的过程的占用Region资 ...
- DataGridView拖动到TreeView
很多时候我们会有这样的需求:一个窗体中有两个GRID,两个GRID中数据表结构差不多,我们要把一个GRID中的数据加入到另一个GRID中.一般的做法是新增一个导入或导出按钮,选择目标行后,通过按钮来触 ...
- [TypeScript] Use the TypeScript "unknown" type to avoid runtime errors
The "any" type can be very useful, especially when adding types to an existing JavaScript ...
- perl学习笔记——哈希
哈希 哈希是一种数据结构,它和数组的相似之处在于可以容难任意多的值并能按需取用,而他和数组的不同在于索引的方式,数组是以数字为索引而哈希则是以名字为索引. 哈希的键是唯一的,哈希的值可以重复. 哈希的 ...