Я хочу преобразовать .doc
в .docx
, если файл POSTed (на странице администратора Django) имеет расширение .doc
.
Когда POSTed файл имеет .docx
расширение, ничего плохого не происходит: Django загружает document.docx
в media/documents/document.docx
, и я могу его прочитать.
Но если POST-файл имеет расширение .doc
, у меня странное поведение Django: он не загружает document.doc
в media/documents/document.doc
!Вместо этого Django делает реляционный путь для этого файла, например document.doc ('documents/document.docx' for the .docx file)
, и полный путь тоже неверен: /home/steppenhorde/project/app/media/document.doc (/home/steppenhorde/project/app/media/documents/document.docx for the .docx file)
.
Так что я получаю исключение типа "Пакет не найден в /home/steppenhorde/project/app/media/documents/document.docx
# MEDIA_ROOT = os.path.join(BASE_DIR, 'media') in the settings.py
# file = models.FileField(upload_to='documents/') in the models.py
# filepath = Model.file
if filepath.path.endswith('.doc'):
doc_filepath = filepath
print(doc_filepath) # document.doc
print(doc_filepath.path) # /home/steppenhorde/project/app/media/document.doc
os.system(f'antiword {doc_filepath} > {docx_filepath}') # after this I have some code for parse docx_filepath
else:
docx_filepath = filepath
print(docx_filepath) # documents/document.docx
print(docx_filepath.path) # /home/steppenhorde/project/app/media/documents/document.docx
Я пытался самостоятельно создавать пути, например:
doc_filepath = filepath
splitted_doc_filepath = doc_filepath.path.split('/')
doc_file_name = splitted_doc_filepath[-1]
docx_filepath = f'{MEDIA_ROOT}/documents/{doc_file_name}x'
Но я все еще получаю исключение типа "Пакет не найден в" / home / steppenhorde / project / app / media / documents / document.docx "" из-за Django не загружает document.doc в media / documents / document.doc