最近我通过音频标签在模板中提供.mp3文件并提供下载时遇到了一些麻烦。我解决了,虽然我猜解决方案很差。这就是我在这里问的原因。我使用的是Django 1.4 Python 2.7。
以下是我的方式(我选择像静态文件一样为他们提供服务,并在另一个视图中提供下载,因为第一个会打开一个新标签并播放文件):
models.py
class Audio(models.Model):
id_audio = models.IntegerField(primary_key=True)
date_created = models.DateTimeField()
file_link = models.CharField(max_length=45, unique=True)
class Meta:
db_table = u'audio'
views.py
from django.views.static import serve
def customize_media_serving(request, path, document_root=None, show_indexes=False):
"""
Serve audios as static files for html5 audio tag
"""
# here is my custom filter which controls access to this view
return serve(request, full_path, document_root, show_indexes)
def sound_download(request, sub_folder, filename):
"""
Provides audio file downloads
"""
path_to_mp3 = 'media/sound/'
fsock = open(path_to_mp3+sub_folder+'/'+filename, 'rb')
response = HttpResponse(fsock, mimetype='audio/mpeg')
response['Content-Type'] = 'audio/mp3'
response['Content-Disposition'] = "attachment; filename=%s" % \
(filename.replace(' ', '-'), )
response['Content-Length'] = \
os.path.getsize(path_to_mp3+sub_folder+'/'+filename)
return response
urls.py
url(r'^sound_download/(?P<sub_folder>[\w-]+)/(?P<filename>[\w\s\.-]+)/$',views.sound_download, name=u'Get lead audios history'),
url(r'^media/sound/(?P<path>[\w\s\./_-]+)$', views.customize_media_serving, {'document_root': settings.MEDIA_ROOT, }),
html模板
<!-- audio is an instance of the model Audio -->
<tr>
<td>{{ audio.call_date }}</td>
<td>
<audio preload="auto" controls="" class="history_audio_player">
<source type="audio/mpeg" src="/media/sound/{{ audio.file_link }}" />
{% trans "This text displays if your Internet browser doesn't support the audio player." %}
</audio>
<a href="/sound_download/{{ audio.file_link }}" class="audio_download">
<img src="{{ STATIC_URL }}img/download.png" style="height:30px;"/>
</a>
</td>
</tr>
以上所有这些都可以。
我遇到的唯一问题是我跑
python manage.py collectstatic
所有文件都复制在静态目录
中文件的原因不在公共目录中&#39;静态&#39;是他们将在网站上传时上传。
我猜有更好的解决方案。我的似乎并不完全正确。它就像一辆带有后方矩形轮的自行车:它正在移动,但有些不对劲。我赞美任何建议。
P.S。是的,我已经阅读了有关提供mp3文件和音频标签的一些问题
Not able to serve mp3 files in django
Django: Serving a Download in a Generic View
你可以看到这两个有点帮助