Django:如何正确给出mp3文件

发布于 2024-11-08 13:18:56 字数 562 浏览 3 评论 0原文

问题是我无法通过单击 Google Chrome 中的时间线来更改播放位置(它总是从头到尾播放)
如果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

url 是: http://server/mp3/###.mp3

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

附: 不要使用任何专有的东西,比如 mp3 - 使用“.ogg”格式

The problem is I can't change playing position by clicking on a timeline in google Chrome (it always plays from start to end)
If Nginx gives mp3 file to the client everything is OK and I can change playing position.


In my script I give mp3 this way:

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

The url is: http://server/mp3/###.mp3

So the whole file is given to the client, but still playing pos can't be changed. What is wrong?

PS:
Do not use any proprietary sh*t like mp3 - use ".ogg" format

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青衫儰鉨ミ守葔 2024-11-15 13:18:56

这是因为标头应该处理附加标头(如 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

This is because the headers should handle additiona headers (like Accept-Ranges), and it should handle partial file requests

Doing this kind of things inside Django itself is a mess (I tried it some time ago), but then I ended up using Apache for serving files (this way you just don't waste resources)

You can consider using mod_xsendfile for being able to serve files from your django view using apache, in this way for example:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文