【问题标题】:Django Filename Generation IssueDjango 文件名生成问题
【发布时间】:2013-08-17 20:14:12
【问题描述】:

我有一个基于 Django 的媒体服务器,它接受各种视频格式的上传。在上传大型 .wmv 文件时,我注意到一些奇怪的行为。我第一次上传视频时,转换和上传花了将近五分钟。此后,发生了某种缓存,视频只会指向我之前上传的视频。我不明白为什么会这样。上传视频时,会检查文件扩展名以进行转换,然后执行 ffmpeg 命令进行转换。这一切都是异步运行的,使用 django-celery 和 RabbitMQ 作为消息代理。我看不出 ffmpeg 转换命令不会再次执行的任何原因。这是我处理上传的芹菜任务的代码。 (这是我最初的推理,请查看 EDIT 以获得正确的错误诊断)

@celery.task
def handleFileUploadAsync(update, m, file_type, video_types):
    filename = m.file.name.replace(' ', '\\ ')
    if video_types[file_type] == 'wmv':
        os.system(
            "ffmpeg -i " + MEDIA_ROOT + filename + " -strict experimental -vcodec libx264    -profile:v baseline " + MEDIA_ROOT + filename.replace(video_types[file_type],'mp4')
    )
        m.file.name = m.file.name.replace(video_types[file_type], 'mp4')
        m.save() 
        os.remove(m.file.path.replace('mp4', 'wmv'))
    elif file_type in video_types.keys():
        os.system(
         "ffmpeg -i " + MEDIA_ROOT + filename + " -vcodec libx264 -profile:v baseline -s 672x576 " + MEDIA_ROOT + filename.replace(video_types[file_type],'mp4')
        )
        m.file.name = m.file.name.replace(video_types[file_type], 'mp4')
        m.save()
        if video_types[file_type] != 'mp4':
            os.remove(m.file.path.replace('mp4', video_types[file_type])) 

编辑:

这就是问题所在。当我转换视频时,我只想要转换后的 .mp4 文件,而不是原始上传。 Django 从文件上传字段生成文件名,自动将数字附加到现有文件的末尾(即 test.mp4、test_1.mp4、test_2.mp4 等)。但是,当我上传像test.wmv这样的视频时,转换完成后将没有名为test.wmv的文件(我删除了未转换的文件)。有什么办法可以修改生成这些文件名的 Django 方法吗??

【问题讨论】:

    标签: django caching video rabbitmq celery


    【解决方案1】:

    在声明 FileField 时使用upload_to。也许使用对象的主键作为文件名?

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2011-07-18
      相关资源
      最近更新 更多