用的是django-aliyun-oss2-storage,这个库在linux下可以直接用pip安装
win下要下载源码 https://github.com/xiewenya/django-aliyun-oss2-storage
下载后在虚拟环境下安装,安装前要先把README.md的内容清空并保存为ANSI格式,默认的utf-8编码会报错
python setup.py install
安装好后在settings.py里设置
ACCESS_KEY_ID = "xxxx"
ACCESS_KEY_SECRET = "xxxx"
END_POINT = "https://oss-cn-beijing.aliyuncs.com"
BUCKET_NAME = "xxx"
ALIYUN_OSS_CNAME = "" # 自定义域名,如果不需要可以不填写
BUCKET_ACL_TYPE = "public-read" # private, public-read, public-read-write
DEFAULT_FILE_STORAGE = 'aliyun_oss2_storage.backends.AliyunMediaStorage'
MEDIA_URL = '/media/'
MEDIA_ROOT = "media"
这样设置好后,去后台传个文件试了一下,确实可以上传,oss里会有上传的文件,但是有报错,而且页面上会跳500错误
调试了一番后发现,ckeditor_upload的views里第94行在保存完图片后会写入一个缩略图,这个地方的地址错了,会少前面的/media/uploads
再往下查发现这个地址是从django-aliyun-oss2-storage/aliyun_oss2_storage/backends.py这个地方的class AliyunFile这个类里__init__时就获取错误了,修改代码
# self._name = name[len(self._storage.location):] #这个就是错误代码
self._name= self._storage.location[1:]+ name
修改后要重新python setup.py install安装一下,否则无效
这样就可以上传了,但是发现在图像信息界面点浏览服务器按钮后,不能查看已上传图片
继续调试,根源还是在这个aliyun_oss2_storage上,在AliyunBaseStorage类里面有一个listdir这里我自己做了一个测试发现根本获取不到任何文件,但是把delimiter='/'这个参数去掉就可以了,修改代码
# for obj in ObjectIterator(self.bucket, prefix=name, delimiter='/'):
for objin ObjectIterator(self.bucket, prefix=name):
if obj.is_prefix():
dirs.add(obj.key)
else:
# files.append(obj.key)
files.append(obj.key[len(name)+ 1:])
上面修改了两处代码,说明有两个坑 ,前一个坑就是之前说的,后面那个是要把搜索前缀去掉,像我的搜索前缀(prefix)是media/uploads,否则会后面的代码会在这个基础上再补上这个前缀,这样就会出现 media/uploads/media/uploads,这样就找不到文件,页面不停的菊花,这个坑也是浪费了我很多时间的。
这样改完就可以基本正常使用了
还有一些英文的东西,汉化一下,上传图像那边预览里面会有一些鸟语,去掉的话要在ckeditor/config.js里添加一条
config.image_previewText = ' '; //注意是有空格的,不是空字符
ckeditor_uploader/templates/ckeditor/browse.html这个是点击浏览服务器后出来的界面的模板文件,里面有一些英文的东西汉化
<div class="submit-row">这个标签里面的inputs标签的value改成“插入图片”页面开头的英文改成
{% if files %}
<h2>选择你想要加入的图片,然后点击 '插入图片'...</h2>
{% else %}
<h2>没有已上传的图片. 你可以在上传标签里选择文件后点上传到服务器.</h2>
{% endif %}
还有一个search files要在ckeditor_uploader/forms.py里改
class SearchForm(forms.Form):
q= forms.CharField(label='搜索文件', required=False)
改完后效果