所以我当然知道通过 Django 提供静态文件会让你直接下地狱,但我对如何使用自定义 url 来使用 Django 掩盖文件的真实位置感到困惑。Django:在通用视图中提供下载服务 https://stackoverflow.com/questions/2681338/django-serving-a-download-in-a-generic-view但我接受的答案似乎是“错误”的做事方式。
urls.py:
url(r'^song/(?P<song_id>\d+)/download/$', song_download, name='song_download'),
视图.py:
def song_download(request, song_id):
song = Song.objects.get(id=song_id)
fsock = open(os.path.join(song.path, song.filename))
response = HttpResponse(fsock, mimetype='audio/mpeg')
response['Content-Disposition'] = "attachment; filename=%s - %s.mp3" % (song.artist, song.title)
return response
这个解决方案有效完美但事实证明还不够完美。如何避免直接链接到 mp3,同时仍然通过 nginx/apache 提供服务?
编辑 1 - 附加信息
目前我可以使用以下地址获取我的文件:http://www.example.com/music/song/1692/download/
但上面提到的方法是魔鬼的作品。
我怎样才能完成上面的任务,同时仍然让 nginx/apache 为媒体服务?这是应该在网络服务器级别完成的事情吗?一些疯狂的 mod_rewrite?
http://static.example.com/music/Aphex%20Twin%20-%20Richard%20D.%20James%20(V0)/10%20Logon-Rock%20Witch.mp3
编辑 2 - 额外的附加信息
我使用 nginx 作为我的前端,并使用反向代理返回 apache/开发服务器,所以我认为如果它确实需要某种 mod_rewrite 工作,我将必须找到可以与 nginx 一起使用的东西。