ueditor、django配置阿里云oss解决方案吉耿推荐的后续方案
前言,大部分人在配置ueditor之后无法上传图片、文件到oss或者cdn ;由于ueditor引用的MEDIA_ROOT & MEDIA_URL 是无法对DEFAULT进行识别,只是直接引用,导致图片会存在业务服务器,在研究了几个小时后结合网友经验生成如下解决方案。
python 3.10
django 4.
ueditor 3
思路:
配置好oss,确保非ueditor文件上传及显示正常
修改setting
修改ueditor 的views
测试效果
我们先以网上流行的解决方案解决一半,最后再对views进行二次修改。
新建my_process.py文件到我的app
from django.conf import settings
def ali_media(request):
"""
Adds media-related context variables to the context.
"""
return {'ALI_MEDIA_URL': settings.ALI_MEDIA_URL}
修改setting.py
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
#加入这一段,引入my_process.py
'pages_articles.my_process.ali_media',
#'django.template.context_processors.media',
],
ACCESS_KEY_ID = "*************" #oss密码id
ACCESS_KEY_SECRET = "***********" #oss密码
PREFIX_URL = 'https://'
ALIYUN_OSS_CNAME = "" # 自定义域名,如果不需要可以不填写
BUCKET_ACL_TYPE = "public-read-write" # private, public-read, public-read-write
END_POINT = "oss-cn-shenzhen.aliyuncs.com" # 访问域名, 根据服务器上的实际配置修改
BUCKET_NAME = "test*" # oss 创建的 BUCKET 名称
#此处关键!Ueditor无法识别default设置,须硬改!
DEFAULT_FILE_STORAGE = 'aliyun_oss2_storage.backends.AliyunMediaStorage'
#
MEDIA_URL = '/media/'
MEDIA_ROOT = 'media'
ALI_MEDIA_URL = PREFIX_URL BUCKET_NAME '.' END_POINT '/media/'
ALI_MEDIA_ROOT = 'http://test*.oss-cn-shenzhen.aliyuncs.com/'
DjangoUeditor/view.py替换为以下
(懒人特供,无脑粘贴),有修改的地方有备注(无需解压,删掉后缀zip即可)
网友的思路给我非常重要的参考,但是修改缺了对MEDIA_ROOT的修改
在DjangoUeditor/view.py中
# 保存上传的文件
def save_upload_file(PostFile, FilePath):
try:
f = open(FilePath, 'wb')
for chunk in PostFile.chunks():
f.write(chunk)
except Exception as e:
f.close()
return u"写入文件错误:%s" % e
f.close()
return u"SUCCESS"
#改为上传到阿里云
#保存上传文件到aliyun
def save_upload_file_to_aliyun(PostFile, Outputfile):
access_key = ACCESS_KEY_ID
secret_key = ACCESS_KEY_SECRET
bucket_name = BUCKET_NAME
try:
import oss2
auth = oss2.Auth(access_key, secret_key)
bucket = oss2.Bucket(auth, END_POINT, bucket_name)
# ret, info = put_file(token, key, upload_file)
result=bucket.put_object(Outputfile, PostFile)
return u"SUCCESS"
except Exception as e:
print(str(e))
return str(e)
#调用
state = save_upload_file(file, os.path.join(OutputPath, OutputFile))
#替换成
state = save_upload_file_to_aliyun(file, OutputPathFormat)
但是到这一步是无法上传到oss的,因为ueditor无法识别
#把下面改为对应到阿里的media root
# USettings.gSettings.MEDIA_URL,
st.ALI_MEDIA_ROOT,
如果使用自定义域名,则必须额外配置media url,与media root 是不同的,一个为上传,一个为保存和获取地址。为了让代码更具有安全性和更优雅,尽量留意这些细节,在Ueditor里面找到相应的进行重新配置
完成!Done!
PS:
注意直接改为'私有'或'公共读'将无效(not your bucket!),需要通过主账号对子账号添加权限:
AliyunOSSFullAcess(私有有效)
AliyunOSSReadOnlyAccess(公共读有效)
机制为对有效的Secret ID 通过oss2 转码,然后对bucket读写文件
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfeffej
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01