【问题标题】:Django: how to give mp3 file correctlyDjango:如何正确提供 mp3 文件
【发布时间】:2011-05-19 10:28:52
【问题描述】:

问题是我无法通过单击谷歌浏览器中的时间线来更改播放位置(它总是从头到尾播放)
如果 Nginx 向客户端提供 mp3 文件,一切都OK,我可以更改播放位置。


在我的脚本中,我以这种方式提供 mp3:

from django.core.servers.basehttp import FileWrapper
wrapper = FileWrapper(file( 'mp3file.mp3' ))
response = HttpResponse(wrapper, content_type='audio/mpeg')
response['Content-Length'] = os.path.getsize( 'mp3file.mp3' )
return response

网址是:http://server/mp3/###.mp3

所以整个文件都交给了客户端,但仍然播放 pos 不能更改。怎么了?

PS: 不要使用任何专有的 sh*t,如 mp3 - 使用“.ogg”格式

【问题讨论】:

    标签: python django http-headers mp3


    【解决方案1】:

    这是因为标头应该处理附加标头(如 Accept-Ranges),并且它应该处理部分文件请求

    在 Django 内部做这种事情本身就是一团糟(我前段时间尝试过),但后来我最终使用 Apache 来提供文件(这样你就不会浪费资源)

    您可以考虑使用mod_xsendfile 以便能够使用 apache 从您的 django 视图中提供文件,例如:

    response = HttpResponse(mimetype='audio/mpeg')
    response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)
    response['Accept-Ranges'] = 'bytes'
    response['X-Sendfile'] = smart_str(path_to_file)
    return response
    

    【讨论】:

    • 谢谢!但是用户访问呢?例如只允许注册和输入的用户下载文件。这样的事情只能在脚本中完成。还是我不对? (我知道提供静态文件应该由快速服务器完成,这种情况该怎么办?)
    • 我在上面发布的代码可能在您的 django 视图中,因此如果未注册,您可以决定是发送文件还是将用户重定向到其他地方。所以是的,您可以使用 mod_xsendfile 限制对文件的访问。
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2021-03-02
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    相关资源
    最近更新 更多