...
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
|
...