Django:在自定义 URL 后面提供媒体服务

2023-12-25

所以我当然知道通过 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 一起使用的东西。


要扩展前面的答案,您应该能够修改以下代码并让 nginx 直接为您的下载文件提供服务,同时仍然保护文件。

首先添加一个位置,例如:

location /files/ {
   alias /true/path/to/mp3/files/;
   internal;
}

到您的 nginx.conf 文件(内部使其无法直接访问)。然后你需要一个 Django View,如下所示:

def song_download(request, song_id):
    try:
        song = Song.objects.get(id=song_id)
        response = HttpResponse()
        response['Content-Type'] = 'application/mp3'
        response['X-Accel-Redirect'] = '/files/' + song.filename
        response['Content-Disposition'] = 'attachment;filename=' + song.filename
    except Exception:
        raise Http404
    return response

这会将文件下载交给 nginx。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django:在自定义 URL 后面提供媒体服务 的相关文章

  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • 以同步方式使用 FastAPI,如何获取 POST 请求的原始正文?

    在中使用 FastAPIsync not async模式 我希望能够接收 POST 请求的原始 未更改的正文 我能找到的所有例子都显示async代码 当我以正常同步方式尝试时 request body 显示为协程对象 当我通过发布一些内容来
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • has_object_permission 和 has_permission 有什么区别?

    我很困惑BasePermission在 Django rest framework 中 这里我定义了一个类 IsAuthenticatedAndOwner class IsAuthenticatedAndOwner BasePermissi
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 如何设置 Celery 来调用自定义工作器初始化?

    我对 Celery 很陌生 我一直在尝试设置一个具有 2 个独立队列的项目 一个用于计算 另一个用于执行 到目前为止 一切都很好 我的问题是执行队列中的工作人员需要实例化一个具有唯一 object id 的类 每个工作人员一个 id 我想知
  • 使用 Firefox 绕过弹出窗口下载文件:Selenium Python

    我正在使用 selenium 和 python 来从中下载某些文件web page http www oceanenergyireland com testfacility corkharbour observations 我之前一直使用设
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • 如何为每个屏幕添加自己的 .py 和 .kv 文件?

    我想为每个屏幕都有一个单独的 py 和 kv 文件 应通过 main py main kv 中的 ScreenManager 选择屏幕 设计应从文件 screen X kv 加载 类等应从文件 screen X py 加载 Screens
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f

随机推荐

  • 有效计算两个 std::multimap 迭代器之间的条目数

    我想计算两个迭代器之间的条目数std multimap在不到 O N 的时间内 有什么技巧或巧妙的方法可以做到这一点吗 Since std multimap有双向迭代器 我的理解是这样的std distance可以在 O N 时间内完成 其
  • 自举流体和静态容器

    我正在尝试在单页引导布局中将流体容器与固定容器结合起来 我想要的是 例如 有一个大图像作为英雄单元 但不是英雄单元 视口的 100 宽度 高度 或者 3 列图像除以 100 但在其他情况下 在同一页面内 它将具有最大 1200px 容器以及
  • JavaScript 代码约定 - 变量声明 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP中有pdf模板的解决方案吗?

    我需要通过 PHP 生成 pdf 格式的报价 并使用模板和从数据库检索的动态值 它可行吗 更新 我看到人们最近对此表示赞同 并想补充一点wkhtml转pdf http code google com p wkhtmltopdf对于大多数应用
  • pymssql 抛出 ImportError: 使用 py2exe 构建应用程序时没有名为 _mssql 的模块

    我有 python 应用程序应该作为 Windows 可执行文件启动 我正在使用 py2exe 和 pymssql 1 9 908 我使用下一个构建脚本来生成应用程序 from distutils core import setup imp
  • 使用具有相同控制器的 STI 路径

    我正在使用 STI 想知道是否必须为每个型号配备单独的控制器 我遇到了一种情况 我只对 STI 关系中的一个模型使用创建和编辑操作 但如果我尝试为其创建表单 则会收到 未定义方法 错误 更具体地说 我有两个继承自 List 的模型 clas
  • Emacs lisp 计算 alist 中的变量

    这是一个后续问题Emacs Lisp 评估列表中的变量 https stackoverflow com questions 1664202 emacs lisp evaluate variable in alist 我正在尝试设置defau
  • Android中动态设置TextView的宽度和高度

    我正在尝试动态设置 TextView 宽度 使用setWidth width method txtviewOne setWidth 10 txtviewTwo setWidth 10 但没有成功 请帮助我如何动态设置textview的宽度
  • Python的collections.Counter和nltk.probability.FreqDist之间的区别

    我想计算文本语料库中单词的术语频率 我已经使用 NLTK 的 word tokenize 和probability FreqDist 一段时间来完成这项工作 word tokenize 返回一个列表 通过 FreqDist 将其转换为频率分
  • 在android中复制列表项

    我找到了一个示例 它在列表视图中显示所有联系人 并让您呼叫单击的联系人 但是 我只想复制联系电话放在剪贴板上 并在选择列表项时显示 toast public class ContactListActivity extends Activit
  • Ansible:检查服务是否正在侦听特定端口

    您将如何使用 Ansible 来确认服务是否正在特定端口上运行 例如 Apache 是否在端口 80 上运行 MySQL 是否正在监听 3912 端口 Tomcat 正在监听 8080 端口吗 据我了解 有service and wait
  • 外部接口和 Internet Explorer 9 问题

    天哪 我讨厌外部接口吗 我有一个视频播放器 它利用外部接口来控制 Flash 对象并允许 Flash 对象将消息传递给相同的 JavaScript 有一段时间它在所有浏览器中都运行良好 然后几天前 在我将项目移出开发之前 我去所有浏览器中测
  • 在 IntelliJ“新项目”>“Maven”选项卡中更新 Maven 原型列表

    如何更新 IntelliJ IDEA 版本 2017 2 中 新建项目 对话框中列出的 Maven 原型列表 手动触发Maven缓存更新 IntelliJ 2017 2 与 Maven 相比并不那么 智能 您必须手动调用列出原型的存储库信息
  • MONGODB Mongoimport 可能加速吗?

    我有一个 2 GB 的 CSV 文件 其中包含 9 M 条记录 我使用本机 mongoimport 工具将其导入到 MongoDB 中 它以每秒 8K 的速率导入 CSV 总时间为 10 分钟 导入速度相当合理 但似乎比MySQL LOAD
  • Python转储带有重音符号的json[重复]

    这个问题在这里已经有答案了 如何打印带有特殊字符 或 的json 我可以这样打印 import json weird dict person print json dumps weird dict indent 4 sort keys Tr
  • 在 coord_polo 上制作弯曲文本

    我想用 coord polar 在 ggplot 周围制作弯曲文本 我有数据框 z lt data frame a c sensor 1 sensor 2 sensor 3 sensor 4 sensor 5 sensor 6 sensor
  • cd 命令不会更改目录。命令提示符

    我有 Windows 8 并且正在使用命令提示符 它说 C Windows System32 gt 如果我尝试更改目录 它会显示 系统找不到指定的路径 在这种情况下 我输入以下命令 cd desktop 它在我的 Windows 7 计算机
  • Asp.net MVC ModelState.Clear

    谁能给我一个关于 ModelState 在 Asp net MVC 中的作用的简洁定义 或者一个链接 我特别需要知道在什么情况下有必要或需要打电话ModelState Clear 有点开放式结局吧 抱歉 我认为告诉您我实际上在做什么可能会有
  • 是否有与 InlineModelAdmin 等效的 get_form 方法?

    我试图在继承的类中显示不同的字段堆叠内联取决于它是新实例还是现有实例 即添加或更改表单 我知道在继承的类中模型管理员我可以重写 get form 方法来实现此目的 如下所述here https stackoverflow com quest
  • Django:在自定义 URL 后面提供媒体服务

    所以我当然知道通过 Django 提供静态文件会让你直接下地狱 但我对如何使用自定义 url 来使用 Django 掩盖文件的真实位置感到困惑 Django 在通用视图中提供下载服务 https stackoverflow com ques