码迷,mamicode.com
首页 > 其他好文 > 详细

DjangoUeditor 使用七牛云存储

时间:2014-12-21 01:51:30      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

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 {uhash: uFnpm2Sxt4_oiXtVdG8bONBsnIUAD, ukey: uimages/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

DjangoUeditor 使用七牛云存储

标签:

原文地址:http://www.cnblogs.com/tk091/p/4176103.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!