zoukankan      html  css  js  c++  java
  • DjangoUeditor 使用七牛云存储

    DjangoUeditor 是一个相当赞的django 富文本编辑器,你可以在

    https://github.com/zhangfisher/DjangoUeditor

    查看相关信息。

    我一直想着把DjangoUeditor 的图片和文件存储修改为七牛云存储,但又觉得自己js水平太菜,所以就一直拖延到现在,

    其实我根本没改js。

    好了,下面不废话,开始。

    一、文件上传到七牛

    在修改 DjangoUeditor 存储到七牛之前,我第一步要尝试的,就是本地文件上传到七牛。

    这一步需要七牛的sdk

    https://github.com/qiniu/python-sdk/releases

    你可以用

    pip install qiniu

    安装。

     1 >>> access_key = 'your ak '
     2 >>> secret_key = 'your sk'
     3 >>> bucket_name = 'your bucket name'
     4 
     5 >>> from qiniu import Auth,put_file
     6 >>> q = Auth(access_key, secret_key)
     7 >>> PostFile = 'images/Koala_20141220231309_308.jpg'
     8 
     9 #PostFile  为上传后所代表的文件及路径
    10 
    11 >>> token = q.upload_token(bucket_name, PostFile)
    12 >>> FilePath = 'C:\Users\r3call\Pictures\Zhuoku001.jpg'
    13 
    14 # FilePath 为本地文件路径
    15 >>> ret, info = put_file(token, PostFile, FilePath)
    16 >>> ret
    17 {u'hash': u'Fnpm2Sxt4_oiXtVdG8bONBsnIUAD', u'key': u'images/Koala_20141220231309_308.jpg'}

    一旦上传成功, ret这个字典就会存在名为key的key,我们检测这个key就可以判断是否上传成功。

    二、DjangoUeditor 上传文件到七牛

    既然第一步已经成功了,我们就有希望上传文件到七牛,我首先找到了DjangoUeditor 的处理文件上传的函数。

    这里说说我查找的步骤:

    1.找到urls.py

    url(r'^controller/$',get_ueditor_controller)

    2、这样我知道函数叫做get_ueditor_controller,那么我到views.py中查找

    然后我找到了一个函数叫做 UploadFile ,这个函数对文件上传进行了 检测和存储

    其中

    state=save_upload_file(file,os.path.join(OutputPath,OutputFile))

    是真正处理文件存储的函数,我们来看看代码

     1 #保存上传的文件
     2 def save_upload_file(PostFile,FilePath):
     3     try:
     4         f = open(FilePath, 'wb')
     5         for chunk in PostFile.chunks():
     6             f.write(chunk)
     7     except Exception,E:
     8         f.close()
     9         return u"写入文件错误:"+ E.message
    10     f.close()
    11     return u"SUCCESS"

    我要把文件上传到七牛,就需要仿照这个函数对文件进行处理。

    于是我编写了一个函数如下:

     1 #保存上传文件到七牛
     2 def save_upload_file_to_qiniu(upload_file,key):
     3     access_key = 'your ak'
     4     secret_key = 'your sk'
     5     bucket_name = 'your bucket name'
     6     try:
     7         from qiniu import Auth,put_file,put_data
     8         q = Auth(access_key, secret_key)
     9         token = q.upload_token(bucket_name, key)
    10         # ret, info = put_file(token, key, upload_file)
    11         ret, info = put_data(token, key, upload_file)
    12         if ret.get('key',None) == None:
    13             raise Exception('upload error')
    14         else:
    15             return u"SUCCESS"
    16     except Exception, e:
    17         print(str(e))
    18         return str(e)

    这个函数写好之后,我要在哪里调用呢?

    state=save_upload_file(file,os.path.join(OutputPath,OutputFile))

    我把这里修改为

    state= save_upload_file_to_qiniu(file,OutputPathFormat)

    其中file是上传过来的图片,

    OutputPathFormat  是生成图片的文件路径,类似于 images/Penguins_20141221001519_634.jpg

    文件上传之后,调用save_upload_file_to_qiniu 对文件进行存储,如果成功,就会返回 SUCCESS,我们把结果返回。

    原始返回信息如下

    1     return_info = {
    2         'url': urllib.basejoin(USettings.gSettings.MEDIA_URL , OutputPathFormat) ,                # 保存后的文件名称
    3         'original': upload_file_name,                  #原始文件名
    4         'type': upload_original_ext,
    5         'state': state,                         #上传状态,成功时返回SUCCESS,其他任何值将原样返回至图片上传框中
    6         'size': upload_file_size
    7     }

    在返回之前,我们还需要定义一个变量

    QINIU_BUCKET_DOMAIN = 'http://hello.qiniudn.com/'

    这样,QINIU_BUCKET_DOMAIN  和 OutputPathFormat 连接起来,就是一个完整的文件 URL 地址,类似于

    http://hello.qiniudn.com/images/Penguins_20141221001519_634.jpg

    我们只需要返回这个URL 给前端即可

     1     #返回数据
     2     QINIU_BUCKET_DOMAIN = 'http://hello.qiniudn.com/'
     3     return_info = {
     4         # 'url': urllib.basejoin(USettings.gSettings.MEDIA_URL , OutputPathFormat) ,                # 保存后的文件名称
     5         'url': urllib.basejoin(QINIU_BUCKET_DOMAIN , OutputPathFormat) ,                # 保存后的文件名称
     6         'original': upload_file_name,                  #原始文件名
     7         'type': upload_original_ext,
     8         'state': state,                         #上传状态,成功时返回SUCCESS,其他任何值将原样返回至图片上传框中
     9         'size': upload_file_size
    10     }

    到此,我们把 DjangoUeditor 的存储改为七牛基本就结束了,如果需要管理文件,或者将AK 和SK设置到配置文件中,你可能还有些活要做。

    注:涂鸦功能并没有使用同样的文件存储函数,如果需要,请单独处理。

    附:修改后的views.py 替换 DjangoUeditor 下的views.py 即可,需要自己填写ak,sk,QINIU_BUCKET_DOMAIN

    使用前需安装 qiniu sdk

  • 相关阅读:
    C# Net Core 使用 ClientWebSocket 实现 WebSocket 客户端
    C# Net 使用 RSA 加密解密 OpenSSL 生成的密码
    VS 代码提示默认不选中 解决办法
    C# While 超时设置
    C# 比较日期格式中的年月大小
    C#实现QQ邮箱IMAP之邮件处理
    Windwos服务之定时发送邮件(一)
    js基于“合成大西瓜的”碰撞模型(一)
    Windows下,通过运行直接打开软件
    C#爬取国家统计局五级地址
  • 原文地址:https://www.cnblogs.com/tk091/p/4176103.html
Copyright © 2011-2022 走看看