在 Flask 中处理文件上传是很容易的,只要确保在 HTML 表单中设置 enctype=“multipart/form-data” 属性。
<form action="/pathtoupload" method="post" enctype="multipart/form-data">
<p><input type="file" name="filename"></p>
<p><input type="submit" value="submit"></p>
</form>
上传的文件存储在内存中,可以通过请求对象 request 的 files 属性访问。
f = requests.files['filename'];
每一个上传的文件都存储在其字典中,表现为标准的 Python 文件 file 对象,比之多了一个保存文件 save() 的方法,用以将文件保存到文件系统中。
f.save(pathtosave)
一个文件上传的简单例子
from flask import request
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['the_file']
f.save('/var/www/uploads/uploaded_file.txt')
上传的文件的文件名在 filename 属性中
filename = f.filename
不过这个名字是系统外的,如果想要使用它,需要记住要使用 werkzeug 提供的 secure_filename 方法进行保存。
from werkzeug.utils import secure_filename
...
f.save('/var/www/uploads/' + secure_filename(f.filename))
总结
- 在 HTML 表单 form 中,设置 enctype=multipart/form-data 属性,并且添加
<input type=file>
标签。 - Flask 应用在 请求对象 request 中通过 files 字典访问文件。
- 使用 save() 方法保存文件。