Django后台kindeditor编辑器图片上传(含视频、文件上传)

  • A+
所属分类:Django学习

接上篇Django后台增加kindeditor富媒体编辑器的内容,已经可以在后台发布内容的时候选用富媒体的编辑编辑,但是遗憾的是,上面的图片、视频、文件均无法上传的。

那么下面的内容就是为了处理上面的需求。

配置setting.py中MEDIA_URL和MEDIA_ROOT

MEDIA_ROOT:主要是为了存放上传的文件。

MEDIA_URL:URL的映射,前后要加上‘/’ 表示从根目录开始。

  1. MEDIA_URL = '/uploads/'
  2. MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')

配置项目的urls.py

  • 先引入文件
  1. from django.conf import settings
  • 增加url内容
  1. url(r"^uploads/(?P<path>.*)$", \
  2.     "django.views.static.serve", \
  3.     {"document_root": settings.MEDIA_ROOT, }),

上述的内容在django1.10以下是可以运行的,但是在1.10以上报错。报错内容如下:

TypeError: view must be a callable or a list/tuple in the case of include().

所以要修改上述的内容为

  1. # 先引入view对象
  2. from django.views import static
  3. # 增加url配置文件
  4. url(r"^uploads/(?P<path>.*)$"static.serve, {"document_root": settings.MEDIA_ROOT},),

 

在APP中创建uploads.py文件,并配置项目urls.py

  • uploads.py文件中内容
  1. from django.http import HttpResponse
  2. from django.conf import settings
  3. from django.views.decorators.csrf import csrf_exempt
  4. import os
  5. import uuid
  6. import json
  7. import datetime as dt
  8. @csrf_exempt
  9. def upload_image(request, dir_name):
  10.     ##################
  11.     #  kindeditor图片上传返回数据格式说明:
  12.     # {"error": 1, "message": "出错信息"}
  13.     # {"error": 0, "url": "图片地址"}
  14.     ##################
  15.     result = {"error": 1, "message": "上传出错"}
  16.     files = request.FILES.get("imgFile", None)
  17.     if files:
  18.         result = image_upload(files, dir_name)
  19.     return HttpResponse(json.dumps(result), content_type="application/json")
  20. # 目录创建
  21. def upload_generation_dir(dir_name):
  22.     today = dt.datetime.today()
  23.     dir_name = dir_name + '/%d/%d/' % (today.year, today.month)
  24.     if not os.path.exists(settings.MEDIA_ROOT + dir_name):
  25.         os.makedirs(settings.MEDIA_ROOT + dir_name)
  26.     return dir_name
  27. # 图片上传
  28. def image_upload(files, dir_name):
  29.     # 允许上传文件类型
  30.     allow_suffix = ['jpg', 'png', 'jpeg', 'gif', 'bmp']
  31.     file_suffix = files.name.split(".")[-1]
  32.     if file_suffix not in allow_suffix:
  33.         return {"error": 1, "message": "图片格式不正确"}
  34.     relative_path_file = upload_generation_dir(dir_name)
  35.     path = os.path.join(settings.MEDIA_ROOT, relative_path_file)
  36.     if not os.path.exists(path):  # 如果目录不存在创建目录
  37.         os.makedirs(path)
  38.     file_name = str(uuid.uuid1()) + "." + file_suffix
  39.     path_file = os.path.join(path, file_name)
  40.     file_url = settings.MEDIA_URL + relative_path_file + file_name
  41.     open(path_file, 'wb').write(files.file.read())
  42.     return {"error": 0, "url": file_url}

在内容测试后,发现编辑中,所有的上传的标签中都使用了imgFile这个标签,所以后面直接更新了允许上传的文件类型即可完成,所有指定格式的内容上传,当然是否会存在危险,这个暂时无法分析,先解决当下问题,有时间的同学可以看下参考阅读里面的一些验证方法。

更新后的代码为:

  1. allow_suffix = ['jpg', 'png', 'jpeg', 'gif', 'bmp', 'zip', "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", "asf", "rm", "rmvb", "doc", "docx", "xls", "xlsx", "ppt", "htm", "html", "txt", "zip", "rar", "gz" , "bz2" ]

上述的内容为常用的文件格式,图片格式不正确文字内容可修改为上传文件格式不正确

 

  • 增加url中的配置内容

在urls.py文件中导入uploads中的方法

  1. from blog.uploads import upload_image

配置url上传规则

  1. url(r'^admin/upload/(?P<dir_name>[^/]+)$', upload_image, name='upload_image'),

在kindeditor编辑器配置文件中,增加上传路径

  1. KindEditor.ready(function (K) {
  2.     K.create('textarea', {
  3.         // 个性化定制内容,更多内容参考官方文档
  4.         width: '800px',
  5.         height: '500px',
  6.         uploadJson: '/admin/upload/kindeditor', //新增了这一行
  7.     });
  8. });

 

上传成功

Django后台kindeditor编辑器图片上传(含视频、文件上传)

 

上传更多内容,请参考:http://blog.csdn.net/xiaoqi030611a/article/details/8308808(python2的内容,注意分辨)

李金龙

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: