mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-12-27 23:51:47 +00:00
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
import os
|
|
from django.conf import settings
|
|
from account.serializers import ImageUploadForm, FileUploadForm
|
|
from utils.shortcuts import rand_str
|
|
from utils.api import CSRFExemptAPIView
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class SimditorImageUploadAPIView(CSRFExemptAPIView):
|
|
request_parsers = ()
|
|
|
|
def post(self, request):
|
|
form = ImageUploadForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
img = form.cleaned_data["image"]
|
|
else:
|
|
return self.response({
|
|
"success": False,
|
|
"msg": "Upload failed",
|
|
"file_path": ""})
|
|
|
|
suffix = os.path.splitext(img.name)[-1].lower()
|
|
if suffix not in [".gif", ".jpg", ".jpeg", ".bmp", ".png"]:
|
|
return self.response({
|
|
"success": False,
|
|
"msg": "Unsupported file format",
|
|
"file_path": ""})
|
|
img_name = rand_str(10) + suffix
|
|
try:
|
|
with open(os.path.join(settings.UPLOAD_DIR, img_name), "wb") as imgFile:
|
|
for chunk in img:
|
|
imgFile.write(chunk)
|
|
except IOError as e:
|
|
logger.error(e)
|
|
return self.response({
|
|
"success": False,
|
|
"msg": "Upload Error",
|
|
"file_path": ""})
|
|
return self.response({
|
|
"success": True,
|
|
"msg": "Success",
|
|
"file_path": f"{settings.UPLOAD_PREFIX}/{img_name}"})
|
|
|
|
|
|
class SimditorFileUploadAPIView(CSRFExemptAPIView):
|
|
request_parsers = ()
|
|
|
|
def post(self, request):
|
|
form = FileUploadForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
file = form.cleaned_data["file"]
|
|
else:
|
|
return self.response({
|
|
"success": False,
|
|
"msg": "Upload failed"
|
|
})
|
|
|
|
suffix = os.path.splitext(file.name)[-1].lower()
|
|
file_name = rand_str(10) + suffix
|
|
try:
|
|
with open(os.path.join(settings.UPLOAD_DIR, file_name), "wb") as f:
|
|
for chunk in file:
|
|
f.write(chunk)
|
|
except IOError as e:
|
|
logger.error(e)
|
|
return self.response({
|
|
"success": False,
|
|
"msg": "Upload Error"})
|
|
return self.response({
|
|
"success": True,
|
|
"msg": "Success",
|
|
"file_path": f"{settings.UPLOAD_PREFIX}/{file_name}",
|
|
"file_name": file.name})
|