保存服务器上传内容
request.files
中提供了上传的文件, MultiDict
映射字段名称为文件对象。如果使用相同的字段名称上传多个文件,请使用 getlist
- 而不是 []
或 get
。
request.files['profile'] # single file (even if multiple were sent)
request.files.getlist('charts') # list of files (even if one was sent)
request.files
中的对象有一个 save
方法,可以在本地保存文件。创建一个公共目录以保存文件。
filename
属性是文件上传的名称。这可以由客户端任意设置,因此通过 secure_filename
方法传递它以生成有效且安全的名称以另存为。 这不能确保名称是唯一的,因此现有文件将被覆盖,除非你执行额外的工作来检测它。
import os
from flask import render_template, request, redirect, url_for
from werkzeug import secure_filename
# Create a directory in a known location to save files to.
uploads_dir = os.path.join(app.instance_path, 'uploads')
os.makedirs(uploads_dir, exists_ok=True)
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
# save the single "profile" file
profile = request.files['profile']
profile.save(os.path.join(uploads_dir, secure_filename(profile.filename)))
# save each "charts" file
for file in request.files.getlist('charts'):
file.save(os.path.join(uploads_dir, secure_filename(file.name)))
return redirect(url_for('upload'))
return render_template('upload.html')