Django:如何正确地提供mp3文件

时间:2011-05-19 10:28:52

标签: python django http-headers mp3

问题是我无法通过点击Google Chrome中的时间轴来改变播放位置(它始终从头到尾播放)
如果 Nginx向客户提供 mp3文件,则所有内容都确定,我可以更改播放位置。


在我的剧本中,我这样给出了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: 不要使用像mp3这样的专有sh * t - 使用“.ogg”格式

1 个答案:

答案 0 :(得分:4)

这是因为标题应该处理另外的标题(如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