• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

ueditor、django配置阿里云oss解决方案吉耿推荐的后续方案

武飞扬头像
jojoal
帮助5

前言,大部分人在配置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即可)

学新通

views.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
系列文章
更多 icon
同类精品
更多 icon
继续加载