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

求助:如何解决DigitalOcean上django-filer文件下载404错误?

问题描述
  • 在DigitalOcean部署的django-cms应用中,用filer创建文件夹、上传文件都正常,但下载已上传文件时返回404错误
  • 示例文件URL:https://my_app.ondigitalocean.app/en/media/filer_public/39/d9/39d9ff20-1aa8-48e5-9b8f-113fc71e534b/atest.pdf/
  • 文件已确认存在于服务器文件系统中
  • settings.py相关配置:
    MEDIA_URL = "media/"
    MEDIA_ROOT = str(BASE_DIR / "media")
    
  • 本地开发环境DEBUG=True时一切正常,DEBUG=False时同样出现404错误
解决方法

1. 适配多语言URL前缀的媒体路由

django-cms的多语言中间件会给URL加上语言前缀(比如/en/),但Django默认的媒体文件路由不会自动处理这个前缀,导致请求路径和实际文件路径不匹配。

修改项目根urls.py,添加能匹配带语言前缀的媒体请求路由:

from django.conf import settings
from django.conf.urls.static import static
from django.urls import path, re_path
from django.views.static import serve

urlpatterns = [
    # 保留你已有的其他路由
]

# 生产环境(DEBUG=False)下处理媒体文件请求
if not settings.DEBUG:
    # 匹配带语言前缀的/media/路径
    urlpatterns += [
        re_path(r'^[a-z]{2}/media/(?P<path>.*)$', serve, {
            'document_root': settings.MEDIA_ROOT,
        }),
        # 同时兼容不带语言前缀的请求(如果有需要)
        re_path(r'^media/(?P<path>.*)$', serve, {
            'document_root': settings.MEDIA_ROOT,
        }),
    ]
# 开发环境仍用默认static处理
else:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

2. 检查DigitalOcean App Platform的媒体文件配置

如果是用App Platform部署,需要确认平台正确映射了媒体目录:

  • 进入App Platform的应用设置,找到「静态资源/Assets」配置项
  • 添加映射规则:将/media/路径指向服务器上的media目录(对应你的MEDIA_ROOT)
  • 注意要确保平台能正确转发/en/media/这类带语言前缀的请求到媒体目录

3. 验证服务器文件权限

上传正常不代表下载时权限没问题,需要确保Web服务器进程能读取媒体文件:

  • 执行以下命令调整权限(以Ubuntu服务器为例):
    sudo chown -R www-data:www-data /path/to/your/app/media
    sudo chmod -R 755 /path/to/your/app/media
    
  • 替换/path/to/your/app为你实际的项目根目录路径

4. 确认django-filer的URL配置

检查filer的相关设置,确保URL生成逻辑正确:

  • 确认FILER_PUBLICMEDIA_PREFIX(默认是filer_public/)和你的URL路径匹配,这部分通常默认配置就没问题
  • 可以在Django shell中打印文件对象的url属性,确认生成的路径是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:53:17