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

Django使用MEDIA_ROOT实现models.FileField时触发权限错误

嘿,我来帮你搞定这个Django文件上传的权限问题!

解决Django FileField上传权限拒绝问题

第一步:检查MEDIA_ROOT配置

这个错误核心是Django进程没有权限写入你设置的MEDIA_ROOT路径——看起来你把它设成了根目录下的/resume,这是系统级目录,普通用户进程默认没有写入权限。建议改成项目内的相对路径,比如在settings.py里这么配置:

# settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 把媒体文件存在项目根目录下的media文件夹里
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

第二步:创建目录并设置正确权限

如果上面的media目录还不存在,先手动创建:

mkdir media

然后确保Django运行的用户(本地开发就是你自己的用户,生产环境可能是web服务器用户)有写入权限:

  • 本地开发可以直接放宽目录权限(仅开发环境用,生产环境别这么做):
chmod -R 755 media
# 要是还不行,再试这个
chmod -R 777 media
  • 生产环境建议把目录所有者改成web服务器用户(比如Nginx/Apache的www-data用户):
sudo chown -R www-data:www-data media

第三步:配置媒体文件路由(本地开发必备)

在项目根目录的urls.py里加上媒体文件的路由配置,确保本地开发服务器能正确访问上传的文件:

# 项目根urls.py
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    # 你的其他路由...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

第四步:重启Django服务

修改完配置和权限后,重启你的Django开发服务器,再回到Admin后台尝试上传文件,应该就能正常工作了。

另外提一句:之后你安装Pillow用ImageField时,这套配置和权限设置同样适用,只是ImageField多了图片格式验证的逻辑而已。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:29:45