參考信息
資料1: django_ckeditor上傳圖片到七牛雲OSS
使用
1. 安裝django-ckeditor 【參考 資料1】
2. setting.py配置INSTALLED_APPS 【參考 資料1】
3. 編寫ckeditor_storage.py
class AliyunStorageObject(Storage):
def __init__(self):
self.now = datetime.datetime.now()
self.file = None
def _new_name(self, name):
new_name = "file/{0}/{1}.{2}".format(self.now.strftime("%Y/%m/%d"), str(uuid.uuid4()).replace('-', ''),
name.split(".").pop())
return new_name
def _open(self, name, mode):
return self.file
def _save(self, name, content):
"""
上傳文件到阿里雲
"""
# 構建對象
bucket = oss2.Bucket(oss2.Auth(ALIYUN_ACCESS_KEY_ID, ALIYUN_ACCESS_KEY_SECRET), ALIYUN_END_POINT, ALIYUN_BUCKET_NAME)
self.file = content
file_data = content.file
file_name = self._new_name(name)
info = bucket.put_object(file_name, file_data.read())
if info.status == 200:
base_url = bucket.sign_url('GET', file_name, 60*60*24)
# 表示上傳成功, 返回文件名
return base_url
else:
# 上傳失敗
logger.error(f'{info.error}')
raise Exception("上傳阿里雲失敗")
def exists(self, name):
# 驗證文件是否存在,因爲會去生成一個新的名字存儲到七牛,所以沒有必要驗證
return False
def url(self, name):
# 上傳完之後,已經返回的是全路徑了
return name
4. setting.py中設置ckeditor
# 圖片保存路徑
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
MEDIA_URL = '/media/'
X_FRAME_OPTIONS = 'SAMEORIGIN'
# 阿里雲OSS相關配置
ALIYUN_ACCESS_KEY_ID = ""
ALIYUN_ACCESS_KEY_SECRET = ""
ALIYUN_END_POINT = ""
ALIYUN_BUCKET_NAME = ""
ALIYUN_OSS_CNAME = "" # 自定義域名,如果不需要可以不填寫
ALIYUN_BUCKET_ACL_TYPE = "public-read" # private, public-read, public-read-write
# OSS配置
DEFAULT_FILE_STORAGE = 'blog.ckeditor_storage.AliyunStorageObject'