Как удалить settings.MEDIA_ ROOT из пути к файлу - PullRequest
0 голосов
/ 30 января 2020

У меня есть код, который создает миниатюру для видео по мере их загрузки - это выглядит так:

views.py метод публикации:

if form.instance.thumbnail == 'images/clearpath_logo/Logo.jpg':
    thumb_title = form.instance.title.replace(" ", "")
    in_path = str(settings.MEDIA_ROOT) + "/" + str(form.instance.video_file)
    out_path = str(settings.MEDIA_ROOT) + "/images/" + thumb_title + ".png"
    if create_thumbnail(in_path, out_path):
        form.instance.thumbnail = "images/" + thumb_title + ".png"

где create_thumbnail - это вспомогательная функция. Она выглядит так:

def create_thumbnail(input_path, output_path):
    """
    Save first frame of video for use as video thumbnail.

    :param input_path: video input path
    :param output_path: image output path
    :return: Boolean
    """
    cap = cv2.VideoCapture(input_path)
    ret, frame = cap.read()
    if ret:
        return cv2.imwrite(output_path, frame)
    else:
        pass

Моя главная задача - удалить settings.MEDIA_ROOT из каждого пути к файлу. Как можно избежать ручного ввода путей к файлам как таковых? Или есть способ, которым я могу сделать метод формы из вспомогательной функции и вызвать URL-адрес экземпляра формы напрямую? Я хочу очистить этот код.

1 Ответ

1 голос
/ 30 января 2020

Основываясь на информации, которую вы предоставили, и имея в виду, я ничего не знаю ни о одной из форм, и я не знаю, что делает cv2, вот как я могу привести это в порядок:

def create_thumbnail(video_file, title):
    """
    Save first frame of video for use as video thumbnail.

    :param video_file: video file from the form instance
    :param title: the title of the thumbnail
    :return: path to the thumbnail
    """
    in_path - f'{settings.MEDIA_ROOT}/{video_file}'
    out_path = f'{settings.MEDIA_ROOT}/images/{title}.png'

    cap = cv2.VideoCapture(input_path)
    ret, frame = cap.read()
    if ret:
        image = cv2.imwrite(output_path, frame)
        if image:
            return out_path
    return ''


if form.instance.thumbnail == 'images/clearpath_logo/Logo.jpg':
    thumb_title = form.instance.title.replace(" ", "")
    form.instance.thumbnail = create_thumbnail(form.instance.video_file, thumb_title)    

NB. Обратите внимание, что ваш код плохо работает с тем, кто называет видеофайл таким же, как кто-то другой. Миниатюра будет просто перезаписана. Одним из простых решений является присвоение миниатюре случайного имени.

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