Flask python 开发篇:上传文件(在指定目录下创建文件夹)

flask上传文件以及常见问题

一、flask文档上传文件的介绍

Flask上传文件的文档介绍,文件上传的基本思想实际上非常简单。它基本上是这样工作的:

  • 1、一个<form>标签用enctype = multipart / form-data标记,<input type = file>放在那个表格中。

  • 2、应用程序从请求对象上的:attr:~flask.request.files字典访问该文件。

  • 3、使用 save() 方法将文件永久保存在文件系统的某个位置。

切记1:在将文件直接存储到文件系统之前,一定要使用secure_filename()函数来保护文件名。
切记2:一定要限制上传文件的扩展

二、上传文件的实现

2.1、生成一个from表单,用来提交图片

在同级别下的templates目录下,新建一个upload.html文件,代码如下:

c 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>
   <form action="" method="post" enctype="multipart/form-data">
    <table>
            <tr>
                <td>头像:</td>
                <td><input type="file" name="file"></td>
            </tr>
           
            <tr>
                <td></td>
                <td><input type="submit" value="提交"></td>
            </tr>
    </table>
  </form>
 </body>
</html>
2.2、编写上传的逻辑

在upload.py文件中,编写上传的逻辑,代码如下:

from flask import Flask, render_template, request, send_from_directory
from werkzeug.utils import secure_filename
import os
import uuid

app = Flask(__name__)

# 设置文件上传保存路径
app.config['UPLOAD_FOLDER'] = 'static/uploads/'
# MAX_CONTENT_LENGTH设置上传文件的大小,单位字节
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024

@app.route('/', methods = ['GET'])
def hell():
    return  '翻倍阿'

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    # 如果是get请求响应上传视图,post请求响应上传文件
    if(request.method == 'GET'):
        return render_template('upload.html')
    else:

        if 'file' not in request.files:
            return 'No file part'

        file = request.files['file']

        if file.filename == '':
            return 'No selected file'

        fname = secure_filename(file.filename)
        ext = fname.rsplit('.')[-1]

        # # 生成一个uuid作为文件名
        fileName = str(uuid.uuid4()) + "." + ext
        # return fileName

        # # os.path.join拼接地址,上传地址,f.filename获取文件名
        static_upload_path = app.config['UPLOAD_FOLDER']

        if not os.path.exists(static_upload_path):
                os.makedirs(static_upload_path)

        file.save(os.path.join(app.config['UPLOAD_FOLDER'], fileName))
        return 'ok'

# 图片下载
@app.route('/download/<filename>', methods=['GET'])
def download(filename):
    if request.method == "GET":
        #通过文件名下载文件
        # return os.path.join(app.config['UPLOAD_FOLDER'], filename)
        path = os.path.isfile(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        # return {
        #     'is_file' :path
        # }
        if path:
            return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)

if __name__ == '__main__':
    app.run(debug=True)

要是想限制上传文件的类型,可以参考文档上的:

三、运行代码、以及常见异常

运行以后,是这样的:

若是选中文件提交以后,出现异常

这里需要确保保存文件的目录真实存在,且有权限,所以为了避免该问题,最好在代码中判断一下目录是否存在

        if not os.path.exists(static_upload_path):
                os.makedirs(static_upload_path)

四、写在最后

宣传一波:大家若是有人想北京租房可以联系我,主要是物资学院、通州北关、北苑、草房的房子。(注:我不是中介哟,我也不打算转行做中介,是我靠谱的朋友在做)

相关推荐
AI原吾3 小时前
掌握Python-uinput:打造你的输入设备控制大师
开发语言·python·apython-uinput
毕设木哥3 小时前
25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】
开发语言·python·计算机·django·毕业设计·课程设计·毕设
weixin_455446173 小时前
Python学习的主要知识框架
开发语言·python·学习
D11_4 小时前
Pandas缺失值处理
python·机器学习·数据分析·numpy·pandas
花生了什么树~.4 小时前
python基础知识(四)--if语句,for\while循环
python
IT毕设梦工厂5 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
luthane6 小时前
python 实现average mean平均数算法
开发语言·python·算法
码农研究僧6 小时前
Flask 实现用户登录功能的完整示例:前端与后端整合(附Demo)
python·flask·用户登录
Ylucius6 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
凡人的AI工具箱6 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python