Django 将 Gif 上传为 JPG,尽管有将其添加为视频的功能

问题描述 投票:0回答:1

我正在尝试将 .gif 上传到我的 django 3.2 api。我已经通过 Postman 进行了故障排除,并得出结论,我的 flutter 应用程序将其作为 .gif 发送,并以 .jpg 返回。问题出在后端。这是我添加媒体函数的相关代码,它检查 file_meme 子类型并将传入的 .gif 转换为视频(有一个单独的块用于检查其视频并添加视频):

def add_media():
    check_can_add_media(post=self)

    is_in_memory_file = isinstance(file, InMemoryUploadedFile) or isinstance(file, SimpleUploadedFile)

    if is_in_memory_file:
        file_mime = magic.from_buffer(file.read())
    elif isinstance(file, TemporaryUploadedFile):
        file_mime = magic.from_file(file.temporary_file_path())
    else:
        file_mime = magic.from_file(file.name)

    check_mimetype_is_supported_media_mimetypes(file_mime)
    # Mime check moved pointer
    file.seek(0)

    file_mime_types = file_mime.split('/')

    file_mime_type = file_mime_types[0]
    file_mime_subtype = file_mime_types[1]

    temp_files_to_close = []

    if file_mime_subtype == 'gif':
                if is_in_memory_file:
                    file = write_in_memory_file_to_disk(file)

                temp_dir = tempfile.gettempdir()
                converted_gif_file_name = os.path.join(temp_dir, str(uuid.uuid4()) + '.mp4')

                ff = ffmpy.FFmpeg(
                    inputs={file.temporary_file_path() if hasattr(file, 'temporary_file_path') else file.name: None},
                    outputs={converted_gif_file_name: None})
                ff.run()
                converted_gif_file = open(converted_gif_file_name, 'rb')
                temp_files_to_close.append(converted_gif_file)
                file = File(file=converted_gif_file)
                file_mime_type = 'video'

            has_other_media = self.media.exists()
    
    if file_mime_type == 'image':
        post_image = self._add_media_image(image=file, order=order)
        if not has_other_media:
            self.media_width = post_image.width
            self.media_height = post_image.height
            self.media_thumbnail = file

    elif file_mime_type == 'video':
        post_video = self._add_media_video(video=file, order=order,type=type)
        if not has_other_media:
            self.media_width = post_video.width
            self.media_height = post_video.height
            self.media_thumbnail = post_video.thumbnail.file
    else:
        raise ValidationError(
            _('Unsupported media file type')
        )

    for file_to_close in temp_files_to_close:
        file_to_close.close()
            
            
    self.save()        

我不确定问题出在哪里。根据我有限的理解,它只获取 .gif 的第一帧并将其作为图像上传。

django ffmpeg gif animated-gif django-3.2
1个回答
0
投票

我不确定问题出在哪里。根据我有限的理解,它只获取 .gif 的第一帧并将其作为图像上传。

© www.soinside.com 2019 - 2024. All rights reserved.