diff --git a/oj/local_settings.py b/oj/local_settings.py index b923291..081b295 100644 --- a/oj/local_settings.py +++ b/oj/local_settings.py @@ -28,6 +28,8 @@ DATABASES = { DEBUG = True # 同理 这是 web 服务器的上传路径 -TEST_CASE_DIR = os.path.join(BASE_DIR, 'test_case/') +TEST_CASE_DIR = os.path.join(BASE_DIR, 'test_case/') ALLOWED_HOSTS = [] + +IMAGE_UPLOAD_DIR = os.path.join(BASE_DIR, 'static/src/upload_image/') \ No newline at end of file diff --git a/oj/server_settings.py b/oj/server_settings.py index 185bf6b..916f143 100644 --- a/oj/server_settings.py +++ b/oj/server_settings.py @@ -35,3 +35,5 @@ DEBUG = True TEST_CASE_DIR = '/root/test_case/' ALLOWED_HOSTS = ['*'] + +IMAGE_UPLOAD_DIR = '/var/mnt/source/OnlineJudeg/static/src/upload_image/' diff --git a/oj/urls.py b/oj/urls.py index a5582d2..1accf7c 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -19,6 +19,7 @@ from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, Problem from submission.views import SubmissionAPIView, SubmissionAdminAPIView, SubmissionShareAPIView from contest_submission.views import ContestSubmissionAPIView, ContestSubmissionAdminAPIView from monitor.views import QueueLengthMonitorAPIView +from utils.views import SimditorImageUploadAPIView from contest_submission.views import contest_problem_my_submissions_list_page @@ -112,4 +113,5 @@ urlpatterns = [ url(r'^help/$', TemplateView.as_view(template_name="utils/help.html"), name="help_page"), url(r'^api/submission/share/$', SubmissionShareAPIView.as_view(), name="submission_share_api"), + url(r'^api/admin/up_load_image/$', SimditorImageUploadAPIView.as_view(), name="simditor_upload_image"), ] diff --git a/static/src/js/lib/simditor/uploader.js b/static/src/js/lib/simditor/uploader.js index d96860e..fc039d7 100644 --- a/static/src/js/lib/simditor/uploader.js +++ b/static/src/js/lib/simditor/uploader.js @@ -143,6 +143,16 @@ Uploader = (function(superClass) { processData: false, contentType: false, type: 'POST', + beforeSend: function(){ + var name = "csrftoken="; + var ca = document.cookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') c = c.substring(1); + if (c.indexOf(name) != -1) name = c.substring(name.length, c.length); + } + arguments[0].setRequestHeader("X-CSRFToken", name); + }, headers: { 'X-File-Name': encodeURIComponent(file.name) }, diff --git a/static/src/js/utils/editor.js b/static/src/js/utils/editor.js index bb09bb4..03ee16c 100644 --- a/static/src/js/utils/editor.js +++ b/static/src/js/utils/editor.js @@ -8,7 +8,7 @@ define("editor", ["simditor"], function(Simditor){ toolbarFloat: false, defaultImage: null, upload: { - url: "", + url: "/api/admin/up_load_image/", params: null, fileKey: "image", connectionCount: 3, diff --git a/utils/views.py b/utils/views.py new file mode 100644 index 0000000..af3afc9 --- /dev/null +++ b/utils/views.py @@ -0,0 +1,27 @@ +# coding=utf-8 + +from rest_framework.views import APIView +from rest_framework.response import Response +from django.conf import settings + +from utils.shortcuts import rand_str + + +class SimditorImageUploadAPIView(APIView): + def post(self, request): + if "image" not in request.FILES: + return Response(data={ + "success": False, + "msg": "上传失败", + "file_path": "/"}) + img = request.FILES["image"] + + image_name = rand_str() + '.' + str(request.FILES["image"].name.split('.')[-1]) + image_dir = settings.IMAGE_UPLOAD_DIR + image_name + with open(image_dir, "wb") as imageFile: + for chunk in img: + imageFile.write(chunk) + return Response(data={ + "success": True, + "msg": "error message", + "file_path": "/static/upload_image/" + image_name})