簡體   English   中英

如何從文件路徑中刪除 settings.MEDIA_ROOT

[英]How to remove settings.MEDIA_ROOT from file path

我有代碼可以在上傳視頻時為視頻創建縮略圖 - 它看起來像這樣:

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? 我想清理這段代碼。

根據您提供的信息並記住,我對任何形式一無所知,而且我不知道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 請注意,您的代碼根本無法處理與其他人一樣命名視頻文件的人。 縮略圖將被覆蓋。 一種簡單的解決方案是為縮略圖指定一個隨機名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM