在 Flask 中处理文件上传非常简单。它需要一个 enctype 属性设置为'multipart/form-data'
的 HTML 表单,将该文提交到指定 URL。URL 处理程序从request.files[]
对象中提取文件并将其保存到所需的位置。
每个上传的文件首先保存在服务器上的临时位置,然后再保存到最终位置。目标文件的名称可以是硬编码的,也可以从request.files [file]
对象的filename
属性中获取。但是,建议使用secure_filename()
函数获取它的安全版本。
可以在 Flask 对象的配置设置中定义默认上传文件夹的路径和上传文件的最大大小。
变量 | 说明 |
---|---|
app.config[‘UPLOAD_FOLDER’] | 定义上传文件夹的路径 |
app.config[‘MAX_CONTENT_PATH’] | 指定要上传的文件的最大大小 - 以字节为单位 |
以下代码具有 URL: /upload
规则,该规则显示templates
文件夹中的upload.html
文件,以及调用uploader()
函数处理上传过程的 URL => /upload-file
规则。
upload.html
有一个文件选择器按钮和一个提交按钮。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Flask 示例</title>
</head>
<body>
<form action = "http://localhost:5000/upload" method = "POST"
enctype = "multipart/form-data">
<input type = "file" name = "file" />
<input type = "submit" value="提交"/>
</form>
</body>
</html>
将看到如下截图所示 -
选择文件后点击提交。表单的 post 方法调用 URL=> /upload_file
。底层函数uploader()
执行保存文件操作。
以下是 Flask 应用程序的 Python 代码。
from flask import Flask, render_template, request
from werkzeug import secure_filename
app = Flask(__name__)
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['file']
print(request.files)
f.save(secure_filename(f.filename))
return 'file uploaded successfully'
else:
return render_template('upload.html')
if __name__ == '__main__':
app.run(debug = True)
运行程序后,执行上面代码,选择一个图片文件,然后点击上传,得到以下结果 -