Django的。如何提供mp3文件?

时间:2015-01-23 15:29:27

标签: django html5 python-2.7 audio

最近我通过音频标签在模板中提供.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>

以上所有这些都可以。

  1. 可以通过链接下载文件
  2. 预定义的用户组可以访问链接
  3. HTML5音频播放器是正确的 显示所有控制元素。该记录不是 只有一次(你不需要重新加载页面)。用户可以操作 进度条选择音频的时间。时间显示正确 播放后
  4. 我遇到的唯一问题是我跑

    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
    你可以看到这两个有点帮助

0 个答案:

没有答案