在 django 中发送视频作为响应

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

如何在 django 中发送视频 mp4 文件作为响应?我不想嵌入 html 的视频或对象标签,但想发送 mp4 本身。有人可以帮忙解决这个问题吗?

django video response
2个回答
6
投票

一般来说你不想这样做;最好重定向到非 Django 服务器来提供静态文件,例如

django.shortcuts.redirect
——它会更快、更节省内存,而且可能更安全。但当然有时这并不方便。这应该有效:

from wsgiref.util import FileWrapper

file = FileWrapper(open('path/to/video.mp4', 'rb'))
response = HttpResponse(file, content_type='video/mp4')
response['Content-Disposition'] = 'attachment; filename=my_video.mp4'
return response

使用

FileWrapper
(docs) 是为了避免一次发送太多数据,因为 Python 文件对象一次迭代一行,并且
\n
字符在 mp4 中可能不是特别常见。 (发送太多意味着网络服务器无法发送从硬盘驱动器读取的文件,而是必须等待长时间尴尬的间隔增量。)

请注意,虽然我没有在任何地方的文档中看到这一点,但文件 在使用 完成后确实会关闭。


0
投票

这有效:

video = open(path, 'rb')

return FileResponse(video, content_type='video/webm')

确保从 django.http 导入 FileResponse

from django.http import FileResponse
© www.soinside.com 2019 - 2024. All rights reserved.