2012-02-23 27 views
1

我想知道如何使用Django传输MP3文件。我使用了http://djangosnippets.org/snippets/365/的一些代码来帮助我解决这个问题。出于某种原因,下面的代码给了我一个比存储在服务器上的实际文件更小的文件。大小在下载窗口中正确显示,但实际文件要小得多。我试过使用下面的代码发送文本文件,它似乎工作得很好。我似乎无法弄清楚什么是错的。使用Django进行mp3流式传输的问题

def play_song(request, id): 
    song = Song.objects.get(pk=id) 
    # song is an object which has a FileField name file 
    filepath = os.path.join(MP3_STORAGE, song.file.name).replace('\\', '/') 
    wrapper = FileWrapper(file(filepath)) 
    response = HttpResponse(wrapper, content_type='audio/mpeg') 
    response['Content-Length'] = os.path.getsize(filepath.replace('/', '\\')) 
    response['Content-Disposition'] = 'attachment; filename=%s' % song.file.name 
    return response 

回答

2

您是否阅读了关于http://djangosnippets.org/snippets/365/的评论?尝试:

对于人们在Windows上你需要指定 “读取二进制” 模式只是一个文本文件,其他任何东西:

包装= FileWrapper(文件(文件名), “RB”)

得到这个工作有一些调整:

包装= FileWrapper(开放(文件名,'rb'))

+0

谢谢,它修复了它。抱歉不先阅读评论。 – nerdap 2012-02-25 12:03:52