How to send a video mp4 file as a response in django? I don't want to embed in a video or object tags of html, but want to send the mp4 itself. Can anyone please help with this issue?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Generally you don't want to do this; it's better to redirect to a non-Django server to serve static files, with e.g. django.shortcuts.redirect
-- it'll be faster, more memory-efficient, and probably more secure. But of course sometimes that's not convenient. This should work:
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
The FileWrapper
(docs) is used so that too much data isn't sent at once, since Python file objects iterate a line at a time, and \n
characters presumably aren't especially common in mp4s. (Sending too much means that the webserver can't send the file as it's read off the hard drive but instead has to wait for long awkwardly-spaced increments.)
Note that although I don't see this noted in the documentation anywhere, the file does get closed when it's done with.