文件上传,报错:IOError: [Errno 13] Permission denied

在进行文件上传时遇到IOError: [Errno 13] Permission denied的问题,错误提示指向E:\pythonProject1\static/uploads目录。通过检查和修改代码,发现原代码中路径不一致导致问题。修正方法是统一路径格式,并在保存文件时使用join和save方法,最终成功解决文件上传权限问题。

文件上传,报错:IOError: [Errno 13] Permission denied

提示:E:\\pythonProject1\\static/uploads

待上传文件目录:
在这里插入图片描述
原代码如下:

f=request.files['file']
basepath = path.abspath(path.dirname(__file__))
upload_path=path.join(basepath,"static/uploads")
f.save(upload_path,secure_filename(f.filename))

1)(E:\\pythonProject1\\static/uploads)中,后半段显然与前面不一致,尝试,修改为
原来:

upload_path=path.join(basepath,"static/uploads")

修改为:

upload_path=path.join(basepath,"static","uploads")

仍然报错,提示:E:\\pythonProject1\\static\\uploads

2)最后修改如下,问题解决:

原来:

upload_path=path.join(basepath,"static/uploads")
f.save(upload_path,secure_filename(f.filename))

修改为:将filename加入join中,后面直接save

filename = secure_filename(f.filename)
upload_path=path.join(basepath,"static","uploads",filename)
f.save(upload_path)

问题解决!

附新的完整代码如下:

# -*- coding: UTF-8 -*-
from flask import  Flask,render_template,request,redirect,url_for
from werkzeug.routing import BaseConverter
from os import path
from werkzeug.utils import secure_filename
app = Flask(__name__)

@app.route('/upload',methods=['GET','POST'])
def upload():
    if request.method == 'POST':
        # 获取文件
        f=request.files['file']
        # from os import path (通过当前的路径)获取绝对路径
        basepath = path.abspath(path.dirname(__file__))

        # from werkzeug.utils import secure_filename 上传文件文件名的安全获取
        # 不安全的获取上传文件的文件名是直接f.filename
        filename = secure_filename(f.filename)

        #通过绝对路径,得到对应存放的目标位置,并且进行拼接
        upload_path=path.join(basepath,"static","uploads",filename)

        # ('upload_path', 'E:\\pythonProject1\\static\\uploads\\es.txt') 不支持中文名,传递的文件名是:es启动命令.txt
        print ("upload_path",upload_path)

        f.save(upload_path)
        return redirect(url_for('upload'))
    return render_template('upload.html')

if __name__ == '__main__':
    #debug=True 加上后,页面会自动加载,不用每次执行
    app.run(debug=True)

附上html上传示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 <h1>文件上传示例</h1>
 <form action="" method="post" enctype="multipart/form-data">
    <p> <input type="file" name="file">
        <input type="submit" value="Upload">
    </p>

 </form>

</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值