flask中如何处理文件上传下载

发布时间 2023-06-10 11:37:10作者: 一先生94

flask中处理文件的上传下载很简单。

基础配置:

app.config[‘UPLOAD_FOLDER’] 定义上传文件夹的路径
app.config[‘MAX_CONTENT_LENGTH’] 指定要上传的文件的最大大小(以字节为单位) # 可以不用

在post请求下用于调用 upload() 函数处理上传过程,在'/download/<filename>'请求下可以通过文件名下载对应提交文件

以下是 Flask 应用程序的 Python 代码

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/upload/'
# MAX_CONTENT_LENGTH设置上传文件的大小,单位字节
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    # 如果是get请求响应上传视图,post请求响应上传文件
    if(request.method == 'GET'):
        return render_template('upload.html');
    else:
        f = request.files['file'];
        fname = secure_filename(f.filename);
        ext = fname.rsplit('.')[-1];
        # 生成一个uuid作为文件名
        fileName = str(uuid.uuid4()) + "." + ext;
        # os.path.join拼接地址,上传地址,f.filename获取文件名
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], fileName))
        return 'ok';

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

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

上传:

  1.secure_filename()函数来处理文件名,可以更加安全;

  2.通过request.files来获取文件内容

  3.save(‘路径’)来保存

下载:

  send_from_directory(‘路径’)函数来实现文件下载