【问题标题】:Sending video as response in django在 django 中发送视频作为响应
【发布时间】:2012-05-16 14:47:11
【问题描述】:

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

【问题讨论】:

    标签: django video response


    【解决方案1】:

    通常你不想这样做;最好将非 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
    

    使用FileWrapper (docs) 以便不会一次发送太多数据,因为 Python 文件对象一次迭代一行,而\n 字符可能在 mp4 中并不常见. (发送过多意味着网络服务器在从硬盘读取文件时无法发送文件,而是必须等待很长的间隔增量。)

    请注意,尽管我在任何地方的文档中都没有看到这一点,但文件 does get closed when it's done with

    【讨论】:

    • 感谢 Dougal 它的工作,但它的下载我点击浏览器中的 url。我不希望那样,我希望 mp4 在浏览器本身中播放。此外,它是一个大约 10 mb 的小视频文件,所以我不想使用任何其他非 Django 服务器。
    • 尝试取出 Content-Disposition 行,这可能会有所帮助。但如果这是一个生产站点,你应该已经在 Django 之外提供你的 CSS 和图像等等......
    • 我尝试取出 Content-Disposition 行,我收到一个名为“错误:[Errno 32] Broken pipe”的错误
    • 当 content-disposition 行被注释掉时,这种情况会重现吗?好像this problem,只是开发服务器一次只能做一件事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2023-03-15
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多