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

Django项目中Zip文件下载链接失效问题求助

解决Django中Zip文件无法下载的问题

你的问题根源在于相对路径的解析错误:当前链接用了相对路径games/GC_007 Goldeneye.zip,Django会将其解析为localhost:8000/downloads/games/...,但你的games文件夹位于manage.py同级(项目根目录),并不属于/downloads路由对应的资源目录,导致服务器找不到文件,无法触发下载。

下面提供两种实用解决方案:

方案1:配置静态文件(适合固定归档文件)

如果这些Zip文件是不需要动态生成的静态资源,直接用Django的静态文件机制处理:

  1. 把games文件夹移动到项目根目录的static文件夹下(没有static文件夹就新建一个),最终路径为static/games/。
  2. 在项目的settings.py中添加静态文件目录配置:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    BASE_DIR / "static",
]
  1. 修改前端下载链接:
    • 如果你用Django模板,使用模板标签生成正确路径:
      <a href="{% static 'games/GC_007 Goldeneye.zip' %}" download>007 Goldeneye</a>
      
    • 如果你用普通HTML文件,直接写绝对路径:
      <a href="/static/games/GC_007 Goldeneye.zip" download>007 Goldeneye</a>
      

方案2:编写下载视图(适合需权限验证/动态文件的场景)

如果需要对下载做权限控制,或者文件是动态生成的,写一个视图来处理下载逻辑:

  1. 在对应APP的views.py中添加下载视图:
from django.http import FileResponse, HttpResponseNotFound
import os
from django.conf import settings

def download_game(request, game_filename):
    # 拼接文件的绝对路径
    file_path = os.path.join(settings.BASE_DIR, 'games', game_filename)
    if os.path.exists(file_path):
        # as_attachment=True 强制浏览器触发下载
        return FileResponse(open(file_path, 'rb'), as_attachment=True)
    else:
        return HttpResponseNotFound("文件不存在")
  1. 在项目的urls.py中添加路由:
from django.urls import path
from .views import download_game

urlpatterns = [
    # 其他已存在的路由
    path('downloads/<str:game_filename>/', download_game, name='download_game'),
]
  1. 修改前端链接:
<a href="/downloads/GC_007 Goldeneye.zip">007 Goldeneye</a>

(无需加download属性,视图已通过as_attachment=True强制触发下载)

额外注意事项

  • 文件名包含空格,建议替换为下划线(如GC_007_Goldeneye.zip),避免URL编码问题;如果保留空格,Django路由会自动处理,但直接写URL时需确保空格被正确编码为%20。
  • 确保games文件夹的权限正确,服务器进程拥有读取该文件夹及内部文件的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:11:27