保存服务器上传内容

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')