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

Django+Ubuntu+Apache环境写入文件出现PermissionError如何解决

Exception Type: PermissionError
Exception Value:
[Errno 13] Permission denied: 'x.mp3'

问题原因与解决方案

该错误本质是运行Django进程的系统用户,对文件写入的目标目录没有创建、修改文件的权限,按以下步骤排查即可解决:

  • 修正文件保存路径写法
    不要直接使用相对路径'x.mp3',Django运行时的工作目录可能和你预期的不一致,建议先在项目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/'
    

    保存文件时拼接绝对路径,避免路径写错:

    import os
    from django.conf import settings
    # 拼接得到文件的绝对存储路径
    save_path = os.path.join(settings.MEDIA_ROOT, 'x.mp3')
    # 后续将文件内容写入save_path即可
    
  • Linux/macOS 环境赋权
    先确认运行Django服务的系统用户:本地开发一般是你当前登录的系统用户,用uWSGI/Gunicorn/Nginx部署的话通常是www-data用户。
    执行以下命令给目标存储目录赋权:

    # 首先创建media目录如果不存在
    mkdir -p 替换为你的项目完整路径/media
    # 给运行Django的用户分配目录所有权,本地开发将www-data替换为你自己的系统用户名
    sudo chown -R www-data:www-data 替换为你的项目完整路径/media
    # 给目录添加读写执行权限
    sudo chmod -R 755 替换为你的项目完整路径/media
    
  • Windows 环境赋权
    右键点击要写入的目标文件夹,依次选择「属性」→「安全」,找到运行Django的用户(本地开发就是当前登录的Windows用户,IIS部署的话对应应用池用户),给该用户添加「修改」「读取和执行」「列出文件夹内容」「读取」「写入」的权限,保存后重启Django服务即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:18:00