Django通过模型上传文件报[Errno 13] Permission denied: '/samples'错误如何解决
可能遗漏的配置及排查方向
- MEDIA相关配置缺失/错误
Django的FileField字段的upload_to参数是相对MEDIA_ROOT配置的路径,而非直接相对BASE_DIR。你需要在settings.py中添加如下配置:
# 配置媒体文件存储根路径 MEDIA_ROOT = BASE_DIR # 配置媒体文件访问路由(可选,仅前台访问时需要) MEDIA_URL = '/media/'
如果你不想把samples直接放在BASE_DIR根目录,也可以调整MEDIA_ROOT为BASE_DIR / 'media',同时把samples目录移动到media目录下即可。
自定义文件验证器规则错误
检查你写的validate_file_extension验证器逻辑:是否允许你当前上传的文件后缀、是否处理了后缀大小写问题(比如只允许小写.xlsx但实际上传的是大写.XLSX)、是否有误判文件类型的逻辑。可以先临时注释掉验证器测试上传是否正常,排查是否是验证器导致的报错。上传文件大小超出限制
Django默认单文件上传最大限制为2.5MB,如果你的样本文件超过这个大小会触发报错,可以在settings.py中调整阈值:
# 单位为字节,以下示例为调整为50MB FILE_UPLOAD_MAX_MEMORY_SIZE = 50 * 1024 * 1024
关联字段未赋值
你的模型中area是未设置null=True、blank=True的OneToOneField,属于必填字段。如果在后台上传时没有选择对应的Actions关联对象,保存时会直接报错,很容易被误判为是文件上传导致的问题。查看具体报错日志
优先查看Django运行日志、Web服务(Nginx/Apache)的错误日志,根据日志中明确的报错信息定位问题,效率远高于盲试配置。
内容的提问来源于stack exchange,提问作者Sidharth kaushik
相关产品推荐
相关产品推荐

