You need to enable JavaScript to run this app. Ubuntu下基于Flask开发文件上传时出现PermissionError权限被拒绝报错
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下基于Flask开发文件上传时出现PermissionError权限被拒绝报错

问题核心原因

你现在遇到的权限报错,和你之前给单个UploadFile.xlsx文件赋读、写、执行权限的操作没有关系:

  • 你的代码默认会把上传的文件直接写入Flask进程启动时的当前工作目录,报错本质是这个工作目录对运行Flask进程的用户(也就是你提到的UID33,绝大多数场景下这个UID对应Ubuntu内置的www-data服务用户)没有新建文件的写权限
  • 你给已存在的单个xlsx文件赋权限,只能控制这个已有文件的读写,没法解决在目录里新建上传文件时的权限校验问题,自然会一直报Permission denied
  • 额外的代码缺陷:没有显式指定上传文件的存储路径,用相对路径保存文件的基准路径完全由Flask启动时的工作目录决定,很多时候会指向系统受限的目录(比如用systemd托管服务时,默认工作目录可能是/,普通服务用户根本没有写权限)
实操解决步骤
  • 第一步:创建独立的上传存储目录
    不要把上传文件直接存在项目根目录,先在终端创建专门的存储文件夹,比如:
    mkdir -p /你的项目实际绝对路径/uploads
    一定要写绝对路径,不要用相对路径,避免路径基准混乱。
  • 第二步:给正确的主体配置目录权限
    先确认运行Flask进程的用户是不是UID33:执行id 33,如果返回的用户是www-data,就直接给这个目录授权给该用户:
    chown -R 33:33 /你的项目实际绝对路径/uploads
    chmod 755 /你的项目实际绝对路径/uploads
    
    这里要注意:权限是要给目录的,不是给某个提前放好的测试文件的,只有目录有写权限,才能在目录里新建上传的文件。
  • 第三步:修正代码里的保存逻辑
    把原来直接保存到当前工作目录的代码,改成拼接独立上传目录的完整绝对路径,避免路径指向错误:
    调整后的Python代码参考:
    import os
    from flask import Flask, request
    from werkzeug.utils import secure_filename
    
    app = Flask(__name__)
    # 配置独立的上传目录绝对路径
    UPLOAD_FOLDER = '/你的项目实际绝对路径/uploads'
    app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
    
    @app.route('/upload')
    def upload_file():
        return render_template('upload.html')
        
    @app.route('/uploader', methods=['GET', 'POST'])
    def upload():
        if request.method == 'POST':
            f = request.files['file']
            # 拼接完整保存路径,不再默认写入当前工作目录
            save_full_path = os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename))
            f.save(save_full_path)
            return 'file uploaded successfully'
    
    原有的HTML上传表单逻辑没有问题,不需要调整。
  • 第四步:排查容易忽略的权限坑
    • 确认你的上传目录没有设置成700权限的私人目录(比如直接存在你的ubuntu用户家目录~下没有放开进入权限),否则运行服务的用户根本没有权限进入目录写文件
    • 如果用了systemd托管Flask服务,要在服务配置文件里确认User字段指定的运行用户和你赋权的用户是同一个,避免给错了用户的权限
    • 不要把上传目录设置成根目录/或者/root这类系统级受限目录,这类目录默认对服务用户没有写权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 20:45:09