2012-05-08 76 views
4

如何在django中發送視頻mp4文件作爲響應?我不想嵌入html的視頻或對象標籤,但想要發送mp4本身。任何人都可以請幫助解決這個問題?在django發送視頻作爲響應

回答

3

通常你不想這樣做;最好重定向到非Django服務器到serve static files,例如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 

FileWrapperdocs)用於讓太多的數據是不是在發送一次,因爲Python文件對象重複在時間線,和\n人物想必不是特別常見在mp4s。 (發送太多意味着Web服務器無法發送文件,因爲它從硬盤驅動器中讀取,而不得不等待較長的笨拙間距增量。)

請注意,雖然我沒有看到在文件的任何地方,文件does get closed when it's done with

+0

感謝Dougal其工作,但它的下載與我打在瀏覽器中的網址。我不希望那樣,我想要mp4在瀏覽器本身播放。此外,它的一個小視頻文件約10 MB,所以我不想使用任何其他非Django服務器。 – Jay

+0

試着拿出Content-Disposition行,這可能有幫助。但如果這是一個生產網站,你應該已經在Django以外的地方爲你的CSS和圖像等提供服務...... – Dougal

+0

我試着拿出Content-Disposition行,我得到一個錯誤,名爲「error:[Errno 32]損壞的管道「 – Jay