在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。
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。