Как прочитать имя файла со специальными символами с диска в FileField? - PullRequest
0 голосов
/ 03 июня 2019

В моем приложении Django я загружаю видео с YouTube в какую-то папку внутри MEDIA_ROOT.

Я также связываю загруженный файл с FileField модели под названием видео.

Проблема возникает, когда заголовок видео содержит некоторые специальные символы. Например, «Idiot Test - 90% fail» будет сохранен на диск с удаленным %, поэтому при сопоставлении этого файла по названию видео с моделью я получаю сообщение об ошибке, что такой файл не существует, потому что я передаю оригинал название видео (не прочитанное с диска) на FileField, которое содержит %.

Как я могу решить это? Должен ли я сначала удалить заголовок видео каких-либо специальных символов? Но тогда мне нужно было бы обслуживать то, что разрешено в разных ОС. Есть ли лучшее решение?

downloaded_path = pytube.download(sampler_settings.AUDIO_PATH, video_title)
downloaded = File(open(downloaded_path, 'rb'))

# create folder by the name of current session key where the downloaded file will be stored
session_folder = os.path.join(sampler_settings.AUDIO_PATH, session_key)
os.mkdir(session_folder)

main_sample = MainSample()
main_sample.session_key = session_key
main_sample.audio = os.path.join(session_folder, video_title)
main_sample.save()

1 Ответ

0 голосов
/ 03 июня 2019

Я предлагаю посмотреть на регулярные выражения

Решение будет что-то вроде:

import re
video_title = re.escape(video_title)
downloaded_path = pytube.download(sampler_settings.AUDIO_PATH, video_title)
downloaded = File(open(downloaded_path, 'rb'))
...

Документы здесь

Дайте мне знать, если это работает для вас:)

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