flask中如何处理文件上传下载
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(‘路径’)函数来实现文件下载