You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Django media根目录文件下载到设备而非浏览器预览

问题原因

你当前的代码直接重定向到静态mp3资源地址,浏览器识别到资源类型为音频时,默认会调用内置播放器直接播放,不会触发下载行为。要实现强制下载,需要在返回的响应中添加指定的响应头,告知浏览器执行下载操作。

修复实现步骤
  1. 首先引入需要的依赖模块:
from django.http import FileResponse
import os
from django.conf import settings
  1. 修改DownloadRdr视图逻辑,构造带下载响应头的文件返回:
class DownloadRdr(TemplateView):
    def get(self, request, pk, *args, **kwargs):
        item = Item.objects.get(id=pk) 
        # 拼接本地mp3文件的绝对路径,适配不同部署环境
        mp3_file_path = os.path.join(settings.MEDIA_ROOT, 'music.mp3')
        # 构造文件响应对象
        response = FileResponse(open(mp3_file_path, 'rb'))
        # 指定资源类型
        response['Content-Type'] = 'audio/mpeg'
        # 关键配置:设置为附件模式,指定下载时的文件名
        response['Content-Disposition'] = 'attachment; filename="music.mp3"'
        return response
注意事项
  • 请确保mp3_file_path对应的文件实际存在,不要硬写本地固定路径,通过settings.MEDIA_ROOT拼接的方式更符合Django规范
  • 如果你的文件存储在第三方云存储服务中,需要在云存储的资源响应配置中添加Content-Disposition: attachment头,再重定向到云存储地址才会触发下载
  • 大文件下载建议使用流式响应避免内存占用过高,FileResponse本身已经支持流式处理,不需要额外配置

内容的提问来源于stack exchange,提问作者comfortchambeshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:18:05