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
相关产品推荐
相关产品推荐

