...
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() # 1. 문서 변환 result = execute_converter(uploaded_file.file) if result['resultCode'] == 0: output_path = result['outputPath'] # 2. 변환된 결과물 압축 해제 unzip_path = unzip(output_path) pb_path = unzip_path + '/document.word.pb' # 3. 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) data = { 'serializedData': serialized_data, # serialized된 pb 데이터 '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 |
...