DjangoUeditor 是一个至关赞的django 富文本编辑器,你能够在前端
https://github.com/zhangfisher/DjangoUeditorpython
查看相关信息。git
我一直想着把DjangoUeditor 的图片和文件存储修改成七牛云存储,但又以为本身js水平太菜,因此就一直拖延到如今,github
其实我根本没改js。npm
好了,下面不废话,开始。django
1、文件上传到七牛七牛云存储
在修改 DjangoUeditor 存储到七牛以前,我第一步要尝试的,就是本地文件上传到七牛。编辑器
这一步须要七牛的sdk函数
https://github.com/qiniu/python-sdk/releasesui
你能够用
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就能够判断是否上传成功。
2、DjangoUeditor 上传文件到七牛
既然第一步已经成功了,咱们就有但愿上传文件到七牛,我首先找到了DjangoUeditor 的处理文件上传的函数。
这里说说我查找的步骤:
1.找到urls.py
url(r'^controller/$',get_ueditor_controller)
二、这样我知道函数叫作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