使用 Flask 实现文件上传和下载

在现代 web 开发中,文件上传和下载功能是一个常见的需求。Flask 是一个灵活且强大的 Python Web 框架,非常适合实现这些功能。本篇文章将引导你如何使用 Flask 实现文件的上传和下载。

流程概述

以下是实现文件上传和下载的基本步骤:

步骤 描述
1 创建 Flask 项目
2 设置文件上传配置
3 创建上传文件的表单
4 编写处理上传的路由
5 编写下载文件的路由
6 运行 Flask 项目

步骤详解

1. 创建 Flask 项目

首先,确保你已经安装 Flask。你可以使用以下命令安装:

pip install Flask

然后,创建一个新的 Python 文件,如 app.py,并导入 Flask:

from flask import Flask, request, send_from_directory
import os

app = Flask(__name__)

2. 设置文件上传配置

你需要设置文件上传的目录和允许的文件扩展名:

# 设置上传文件存储目录
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# 设置允许的文件扩展名
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

# 检查文件扩展名是否被允许
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

3. 创建上传文件的表单

在这里,我们使用 HTML 创建一个上传表单:

@app.route('/')
def upload_form():
    return '''
    <html>
        <body>
            上传文件
            <form method="post" enctype="multipart/form-data">
                <input type="file" name="file">
                <input type="submit">
            </form>
        </body>
    </html>
    '''

4. 编写处理上传的路由

处理文件上传请求并将文件保存到指定的目录:

@app.route('/', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return '没有文件部分'
    
    file = request.files['file']
    
    if file.filename == '':
        return '没有选中文件'
    
    if file and allowed_file(file.filename):
        # 保存文件
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
        return '文件上传成功'

5. 编写下载文件的路由

创建文件下载的路由:

@app.route('/uploads/<filename>')
def download_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

6. 运行 Flask 项目

最后,添加以下代码以运行 Flask 应用:

if __name__ == '__main__':
    # 创建上传目录(如果不存在)
    if not os.path.exists(UPLOAD_FOLDER):
        os.makedirs(UPLOAD_FOLDER)
    
    app.run(debug=True)

结束说明

至此,我们已经完成了基本的 Flask 文件上传和下载功能。你可以通过 发起请求来下载文件。

关系图

erDiagram
    FLASK_APP {
        string name
    }
    FILE {
        string filename
        string path
    }
    FLASK_APP ||--o{ FILE : handles

通过这篇文章的介绍,你应该能够理解如何使用 Flask 简单实现文件上传和下载功能。继续深入学习!使用 Flask 还可以实现更多复杂的功能,如认证、数据库操作等,期待你能在这个奇妙的编程世界中不断探索与成长。