...
- 예제에서
- 이미지 업로드는media 디렉토리에 합니다.
- 이미지 업로드 API는 '/edit/uploadFile'입니다.
...
에디터 설정
Code Block | ||
---|---|---|
| ||
// 사이냅에디터 설정 객체 var SynapEditorConfig = { ... 'editor.upload.image.param': { 'csrfmiddlewaretoken': '{{ csrf_token }}' }, 'editor.upload.image.api': '/edit/uploadFile', ... } |
...
업로드 경로 설정
Code Block | ||
---|---|---|
| ||
# 프로젝트 settings.py ... MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') ... # 프로젝트 urls.py urlpatterns = [ ... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) |
...
url과 view 연동
Code Block | ||
---|---|---|
| ||
# 앱 urls.py from django.urls import path from . import views urlpatterns = [ ... path('uploadFile/', views.upload_file, name='upload_file'), ... ] |
...
view 생성
- 업로드 후 JSON 객체에 'uploadPath' 를 담아 응답해야 합니다.
Code Block | ||
---|---|---|
| ||
# 앱 views.py from django.http import JsonResponse from .forms import UploadFileForm def upload_file(request): if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): uploaded_file = form.save() data = {'uploadPath': uploaded_file.file.url} return JsonResponse(data) |
...
form 생성
Code Block | ||
---|---|---|
| ||
# 앱 forms.py from .models import UploadFile from django import forms class UploadFileForm(forms.ModelForm): class Meta: model = UploadFile fields = ('file', ) |
...
model 생성
Code Block | ||
---|---|---|
| ||
# 앱 models.py import uuid from django.db import models # 저장할 파일 이름을 반환합니다. def get_file_name(instance, filename): ext = filename.split('.')[-1] return "%s.%s" % (uuid.uuid4(), ext) class UploadFile(models.Model): file = models.FileField(upload_to=get_file_name) |
...
- 예제에서
- 문서 업로드는 media 디렉토리에 합니다.
- 변환된 결과물은 media/output 디렉토리에 저장합니다.
- 문서 임포트 API는 '/edit/importDoc'입니다.
...
에디터 설정
Code Block | ||
---|---|---|
| ||
// 사이냅에디터 설정 객체 var SynapEditorConfig = { ... 'editor.import.param': { 'csrfmiddlewaretoken': '{{ csrf_token }}' }, 'editor.import.api': '/edit/importDoc/', ... } |
...
업로드 경로 설정
Code Block | ||
---|---|---|
| ||
# 프로젝트 settings.py ... MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') ... # 프로젝트 urls.py urlpatterns = [ ... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) |
...
url과 view 연동
Code Block | ||
---|---|---|
| ||
# 앱 urls.py from django.urls import path from . import views urlpatterns = [ ... path('importDoc/', views.import_doc, name='import_doc'), ... ] |
...
view 생성
- 임포트 후 JSON 객체에 'serializedData'와 'importPath' 를 담아 응답해야 합니다.
Code Block | ||
---|---|---|
| ||
# 앱 views.py import os import zipfile import zlib from django.conf import settings from subprocess import call from django.http import JsonResponse from .forms import UploadFileForm PROJECT_PATH = os.path.abspath(os.path.dirname(__name__)) MEDIA_ROOT = settings.MEDIA_ROOT def import_doc(request): if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): uploaded_file = form.save() result = execute_converter(uploaded_file.file) if result['resultCode'] == 0: output_path = result['outputPath'] unzip_path = unzip(output_path) pb_path = unzip_path + '/document.word.pb' serialized_data = serialize_pb(pb_path) common_prefix = os.path.commonprefix([output_path, PROJECT_PATH]) import_path = '/' + os.path.relpath(unzip_path, common_prefix) else: import_path = '' serialized_data = [] data = { 'serializedData': serialized_data, 'importPath': import_path } return JsonResponse(data) """ 변환모듈을 실행하여 문서를 변환합니다. """ def execute_converter(file): fname, ext = os.path.splitext(file.name) module_path = '{0}/sedocConverter/sedocConverter_exe'.format(PROJECT_PATH) font_path = '{0}/sedocConverter/fonts'.format(PROJECT_PATH) input_path = file.path output_path = '{0}/output/{1}.zip'.format(MEDIA_ROOT, os.path.basename(fname)) temp_path = '{0}/temp'.format(PROJECT_PATH) cmd = '{0} -z -f {1} {2} {3} {4}'.format(module_path, font_path, input_path, output_path, temp_path) result_code = os.system(cmd) return {'resultCode': result_code, 'outputPath': output_path} """ 변환된 파일의 압축을 해제합니다. """ def unzip(zipFilePath): unzip_path, ext = os.path.splitext(zipFilePath) zip = zipfile.ZipFile(zipFilePath) zip.extractall(unzip_path) return unzip_path """ pb파일을 읽어 serialize하여 반환합니다. """ def serialize_pb(pbFilePath): serialized_data = [] pb_file = open(pbFilePath, 'rb') pb_file.seek(16) pb_contents= pb_file.read() decompressed = zlib.decompress(pb_contents) for byte in decompressed: serialized_data.append(byte & 0xFF) pb_file.close() return serialized_data |
...
form 생성
Code Block | ||
---|---|---|
| ||
# 앱 forms.py from .models import UploadFile from django import forms class UploadFileForm(forms.ModelForm): class Meta: model = UploadFile fields = ('file', ) |
...
model 생성
Code Block | ||
---|---|---|
| ||
# 앱 models.py import uuid from django.db import models # 저장할 파일 이름을 반환합니다. def get_file_name(instance, filename): ext = filename.split('.')[-1] return "%s.%s" % (uuid.uuid4(), ext) class UploadFile(models.Model): file = models.FileField(upload_to=get_file_name) |
...