forked from mirror/MrDoc
70 lines
2.8 KiB
Python
70 lines
2.8 KiB
Python
# coding:utf-8
|
||
from django.http import HttpResponse
|
||
from django.conf import settings
|
||
from django.views.decorators.csrf import csrf_exempt
|
||
import os
|
||
import uuid
|
||
import json
|
||
import datetime as dt
|
||
import base64
|
||
|
||
@csrf_exempt
|
||
def upload_img(request):
|
||
##################
|
||
# {"success": 0, "message": "出错信息"}
|
||
# {"success": 1, "url": "图片地址"}
|
||
##################
|
||
files = request.FILES.get("editormd-image-file", None)
|
||
dir_name = request.POST.get('dirname','')
|
||
base_img = request.POST.get('base',None)
|
||
if files:# 上传普通图片文件
|
||
result = file_upload(files, dir_name)
|
||
elif base_img: # 上传base64编码图片
|
||
result = base_img_upload(base_img,dir_name)
|
||
else:
|
||
result = {"success": 0, "message": "出错信息"}
|
||
return HttpResponse(json.dumps(result), content_type="application/json")
|
||
|
||
# 目录创建
|
||
def upload_generation_dir(dir_name=''):
|
||
today = dt.datetime.today()
|
||
dir_name = dir_name + '/%d%02d/' %(today.year,today.month)
|
||
print("dir_name:",dir_name)
|
||
if not os.path.exists(settings.MEDIA_ROOT + dir_name):
|
||
print("创建目录")
|
||
os.makedirs(settings.MEDIA_ROOT + dir_name)
|
||
return dir_name
|
||
|
||
# 普通图片上传
|
||
def file_upload(files, dir_name):
|
||
#允许上传文件类型
|
||
allow_suffix =["jpg", "jpeg", "gif", "png", "bmp", "webp"]
|
||
file_suffix = files.name.split(".")[-1]
|
||
if file_suffix not in allow_suffix:
|
||
return {"success": 0, "message": "图片格式不正确"}
|
||
relative_path = upload_generation_dir(dir_name)
|
||
file_name = str(dt.datetime.today()).replace(':','').replace(' ','').replace('.','')+files.name
|
||
path_file=os.path.join(relative_path, file_name)
|
||
path_file = settings.MEDIA_ROOT + path_file
|
||
print('文件路径:',path_file)
|
||
file_url = settings.MEDIA_URL + relative_path + file_name
|
||
print("文件URL:",file_url)
|
||
with open(path_file, 'wb') as f:
|
||
for chunk in files.chunks():
|
||
f.write(chunk) # 保存文件
|
||
return {"success": 1, "url": file_url,'message':'上传图片成功'}
|
||
|
||
# base64编码图片上传
|
||
def base_img_upload(files,dir_name):
|
||
files_str = files.split(';base64,')[-1] # 截取图片正文
|
||
files_base = base64.b64decode(files_str) # 进行base64编码
|
||
relative_path = upload_generation_dir(dir_name)
|
||
file_name = str(dt.datetime.today()).replace(':', '').replace(' ', '').replace('.', '') + '.png'
|
||
path_file = os.path.join(relative_path, file_name)
|
||
path_file = settings.MEDIA_ROOT + path_file
|
||
print('文件路径:', path_file)
|
||
file_url = settings.MEDIA_URL + relative_path + file_name
|
||
print("文件URL:", file_url)
|
||
with open(path_file, 'wb') as f:
|
||
f.write(files_base) # 保存文件
|
||
return {"success": 1, "url": file_url, 'message': '上传图片成功'} |