Python Django:如何正确地给出mp3文件

Python Django:如何正确地给出mp3文件,python,django,http-headers,mp3,Python,Django,Http Headers,Mp3,问题是我不能通过点击谷歌浏览器中的时间线来改变播放位置(它总是从头到尾播放) 如果Nginx向客户端提供mp3文件,则一切都正常,我可以更改播放位置 在我的脚本中,我是这样给出mp3的: from django.core.servers.basehttp import FileWrapper wrapper = FileWrapper(file( 'mp3file.mp3' )) response = HttpResponse(wrapper, content_type='audio/mpeg

问题是我不能通过点击谷歌浏览器中的时间线来改变播放位置(它总是从头到尾播放)
如果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
url是:
http://server/mp3/###.mp3

因此,整个文件都将提供给客户端,但仍然无法更改播放pos。怎么了

附言:
不要使用任何专有的sh*t格式,如mp3-use“.ogg”格式,这是因为标头应该处理additiona标头(如Accept Ranges),并且它应该处理部分文件请求

在Django内部做这类事情本身就是一团糟(我以前试过了),但后来我使用Apache来提供文件服务(这样你就不会浪费资源)

可以考虑使用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

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

在Django内部做这类事情本身就是一团糟(我以前试过了),但后来我使用Apache来提供文件服务(这样你就不会浪费资源)

可以考虑使用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

谢谢但用户访问又如何呢?例如,仅允许注册和输入的用户下载文件。这样的事情只能通过脚本来完成。还是我不对?(我知道应该由fast server提供静态文件,在这种情况下该怎么办?)我上面发布的代码可能在django视图中,因此,如果未注册,则由您决定是否发送该文件或将用户重定向到其他地方。是的,您可以使用modxsendfile限制对文件的访问。谢谢!但用户访问又如何呢?例如,仅允许注册和输入的用户下载文件。这样的事情只能通过脚本来完成。还是我不对?(我知道应该由fast server提供静态文件,在这种情况下该怎么办?)我上面发布的代码可能在django视图中,因此,如果未注册,则由您决定是否发送该文件或将用户重定向到其他地方。因此,可以使用modxsendfile限制对文件的访问。