在Django中如何处理request.FILES里面的文件?

In Django how to process the file inside request.FILES?

for file in request.FILES:
        print("")
        video_input_path = file
        img_output_path = 'output.jpg'
        subprocess.call(['ffmpeg', '-i', video_input_path, '-ss', '00:00:00.000', '-vframes', '1', img_output_path])
        print("")

我正在尝试为通过表单上传的文件(视频)生成缩略图,这是从任何视频生成缩略图的纯粹 python 解决方案(也适用于图片,但有更好的解决方案与 PIL)

video_input_path = file

如何在此处访问文件本身?据我所知,我唯一的选择是

file = request.FILES['filename']
file.name           # Gives name
file.content_type   # Gives Content type text/html etc
file.size           # Gives file's size in byte
file.read()         # Reads file

编辑: 这有效,缩略图在 /CACHE/... 文件夹中生成,但这仍然可以改进(请参阅下面的最佳答案)

您可能需要手动处理上传的文件(https://docs.djangoproject.com/es/4.0/topics/http/file-uploads/#basic-file-uploads)。一般来说,Django 对小文件使用 InMemoryUploadedFile,对大文件使用 TemporaryUploadedFile。如果您确定该文件大到足以强制使用 TemporaryUploadedFile ,您可以通过 file.temporary_file_path() 访问它的路径。

另一方面,我建议您使用 PyAV 包而不是子进程来调用 ffmpeg。