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

Django FileField的upload_to参数在Ubuntu服务器报权限错误如何解决

问题原因

Django的FileField的upload_to参数值会自动拼接settings.MEDIA_ROOT配置的路径作为最终存储路径,你本地环境已经正确配置了MEDIA_ROOT = '/Users/whitebear/myproj/',所以拼接upload_to='_mat/'后得到的路径正确。
服务器上触发报错是因为你生产环境的MEDIA_ROOT没有配置/配置错误,为空时直接拼接_mat/就会得到根路径下的/_mat,系统没有根目录的写入权限,自然抛出权限错误。同时Django官方规定upload_to必须传入相对路径,所以你直接传绝对路径会触发校验报错。

解决方案
  • 第一步:修改生产环境的Django配置文件settings.py,添加/修改MEDIA_ROOT配置,指向你项目的根路径:
MEDIA_ROOT = '/var/www/html/myproj/'
# 可选配置访问静态文件的URL前缀,后续需要用文件URL时要用到
MEDIA_URL = '/media/'
  • 第二步:验证配置是否生效,可以进入项目的Django shell执行以下命令查看输出是否正确:
from django.conf import settings
print(settings.MEDIA_ROOT)
  • 第三步:(可选优化)撤销_mat目录的777权限,将目录所有者改为运行Nginx Unit服务的用户(通常是unit或者www-data),权限设置为755即可,避免权限过大带来的安全风险:
chown -R unit:unit /var/www/html/myproj/_mat/
chmod -R 755 /var/www/html/myproj/_mat/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:11