Flask应用文件保存失败:PermissionError [Errno 13]权限拒绝问题求助
解决Flask上传文件时的PermissionError [Errno 13]问题
嘿,我来帮你搞定这个权限错误!先看你的报错细节——你试图写入的是D:/Web_Demo/static/这个文件夹本身,而不是具体的文件,这才是触发错误的核心原因之一,再结合Windows的权限设置,我们分两步解决:
第一步:修复代码逻辑(最关键的前置步骤)
你当前的代码只检查了request.files是否存在,但用户点击上传按钮却没选择文件时,request.files["data"]依然会存在,只是file.filename是空字符串。这时候secure_filename(file.filename)会返回空,os.path.join之后就变成了static文件夹的路径,调用file.save()时就会尝试把文件写入文件夹(而不是文件),直接触发权限拒绝。
修改后的代码会先检查是否真的有文件上传:
import os from flask import Flask, request, redirect, render_template from werkzeug.utils import secure_filename app = Flask(__name__) app.config["UPLOAD_FOLDER"]= 'D:/Web_Demo/static/' @app.route('/analysis.html',methods=['GET', 'POST']) def analysis(): if request.method == "POST": # 用get方法避免键不存在的错误,同时检查文件和文件名是否有效 file = request.files.get("data") if file and file.filename.strip(): filename = secure_filename(file.filename) # 拼接完整的文件保存路径 save_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(save_path) return redirect(request.url) # 如果没选文件,返回带提示的页面 return render_template('analysis.html', error="请先选择要上传的文件") return render_template('analysis.html')
第二步:设置Windows文件夹写入权限
即使修复了代码,你可能还需要确保static文件夹允许当前用户写入:
- 找到
D:/Web_Demo/static/文件夹,右键点击 → 属性 → 切换到安全选项卡 - 点击编辑按钮,在弹出的权限窗口中,找到你当前登录的用户账户(比如
Utsav Dutta) - 在权限列表里,勾选写入权限,然后依次点击应用和确定保存设置
如果还是遇到权限问题,尝试右键点击Sublime Text,选择以管理员身份运行,再打开你的Flask项目运行代码——管理员权限会让Python进程获得足够的写入权限。
注意:Linux/macOS的
sudo命令在Windows下不适用,所以不用尝试类似sudo chmod 775的操作,用上面的图形界面操作即可。
内容的提问来源于stack exchange,提问作者Utsav Dutta
相关产品推荐
相关产品推荐

