由于我的服务器是轻量级的,考虑到后面博客图片太多,容易造成访问延迟,因此准备把博客图片传到第三方云平台实现存储并加速,以此来减少我服务器的压力,国内的知名云存储无非七牛云和又拍云,对于https网站来说,又拍云无疑更加优惠,对新人很便宜友好,话不多说,开始注册。注册后在通过身份认证即可开始配置创建云存储服务后,点击配置,如图所示注意哈,我网站的域名是codingchangeworld.com,这里千万不要直接用你的顶级域名绑定,否则你的顶级域名会被云存储这个服务占用,导致你用顶级域名无法访问你的网站!,因此我打算创建个二级域名,我服务器是腾讯云的,可以直接创建二级域名,如图所示
申请了后开始绑定img这个二级域名,再按照如下图操作,将CNAME复制并添加你刚申请的img域名记录值中如图所示
配置号了,接下来弄django-ckeditor了,一般django-ckeditor默认上传的路径是通过medie_url路径确定的,现在我们要自定义上传路径,官方提供了我们自定义的方法DEFAULT_FILE_STORAGE值,我们在settings.py中加入
DEFAULT_FILE_STORAGE = 'users.ckeditor_upyun.StorageObject'
注意,users是一个app,ckeditor_upyun是app下的ckeditor_upyun.py文件,StorageObject是py文件下的类,我们看下这个代码,如图所示具体代码如下所示
import datetime
import uuid
import upyun
from django.core.files.storage import Storage
from django.conf import settings
class StorageObject(Storage):
def __init__(self):
self.now = datetime.datetime.now()
self.file = None
def _new_name(self, name):
#判断是否来自用户头像文件,是的话传入又拍云Users文件夹
if 'Users' in name:
new_name = "Users/{}.{}".format(str(uuid.uuid1()).replace('-', ''),
name.replace('Users','').split(".").pop())
#否则1话传入blogImg文件夹
else:
new_name = "blogImg/{}.{}".format( str(uuid.uuid1()).replace('-', ''),
name.split(".").pop())
return new_name
def _open(self, name, mode):
return self.file
def _save(self, name, content):
"""
上传文件到又拍云
"""
print('content:',content)
print(type(content))
file_name = self._new_name(name)
print(file_name)
up = upyun.UpYun('服务名称', '操作员账号', '操作员密码', timeout=30,
endpoint=upyun.ED_AUTO)
up.put(file_name, content.file, checksum=True)
base_url = '{}{}'.format(settings.UPYUN_URL,file_name)
print(base_url)
return base_url
def exists(self, name):
# 验证文件是否存在,因为会去生成一个新的名字存储到七牛,所以没有必要验证
return False
def url(self, name):
# 上传完之后,已经返回的是全路径了
return name
这里只要看_new_name方法和_save方法,其他的方法我们不用动。_new_name方法中的name参数即是我们django-ckeditor文件上传时的文件名,在这个方法中我们重新命名了改文件-防止上传到又拍云文件名重复,这里我为什么用if else判断呢,主要是我又拍云创建了2个文件夹,一个专门存用户头像的,一个专门存博客图片的,用户头像上传的我是用的imgField接收的,上传的视图代码如下所示
因此_new_name中直接可以判断文件是用户头像还是博客文章的,如果你们想放在一起的话就不用这样麻烦判断了,直接放一起。_save函数中content就是上传的文件内容(图片内容),这个方法就是又拍云上传的主要实现过程,又拍云上传有api文档,可以很好的查看其上传方法,我们首先要pip install upyun 命令下载库,直接用up.put直接上传,这是我又拍云云存储的文件夹
基本这就全部完成了!
点击此处登录后即可评论