Почему FieldFile возвращает разные относительные и абсолютные пути для файлов .doc и .docx? - PullRequest
0 голосов
/ 09 июля 2019

Я хочу преобразовать .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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...