From 9b83a2e24982b82b18ef7f2598a10279055bf813 Mon Sep 17 00:00:00 2001 From: "sxw@401" Date: Fri, 11 Sep 2015 20:34:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AF=8C=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E7=BC=96=E8=BE=91=E5=99=A8=E4=B8=8A=E4=BC=A0=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E7=9A=84=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E5=9C=A8setting=5Floacl=E5=92=8Cserver?= =?UTF-8?q?=E9=87=8C=E6=9A=82=E6=97=B6=E5=9C=A8static/src/upload=5Fimage/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oj/local_settings.py | 4 +++- oj/server_settings.py | 2 ++ oj/urls.py | 2 ++ static/src/js/lib/simditor/uploader.js | 10 ++++++++++ static/src/js/utils/editor.js | 2 +- utils/views.py | 27 ++++++++++++++++++++++++++ 6 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 utils/views.py diff --git a/oj/local_settings.py b/oj/local_settings.py index b9232918..081b2959 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 185bf6bb..916f1434 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 a5582d26..1accf7c1 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 d96860ec..fc039d76 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 bb09bb46..03ee16c3 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 00000000..af3afc9a --- /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})