如何从文件路径中删除settings.MEDIA_ROOT

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从文件路径中删除settings.MEDIA_ROOT相关的知识,希望对你有一定的参考价值。

我有用于在上传视频时创建缩略图的代码-看起来像这样:

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。如何避免像这样手动输入文件路径?还是有一种方法可以使出helper函数中的表单方法并直接调用表单实例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)    

N.B。请注意,您的代码与将视频文件命名为其他人的代码完全不一样。缩略图将被覆盖。一种简单的解决方案是为缩略图指定一个随机名称。

以上是关于如何从文件路径中删除settings.MEDIA_ROOT的主要内容,如果未能解决你的问题,请参考以下文章

Django——photo

如何从批处理脚本中的文件路径中删除最后一个“\”

Lua从请求uri中删除文件路径中的文件夹

如何从路径和文件名中删除非法字符?

如何从 Bash 中的路径字符串中删除文件后缀和路径部分?

如何从文件系统中获取已删除文件夹的完整路径