Flask – 文件上传

  • 简述

    在 Flask 中处理文件上传非常容易。它需要一个 HTML 表单,其 enctype 属性设置为“multipart/form-data”,将文件发布到 URL。URL 处理程序从request.files[]对象并将其保存到所需位置。
    每个上传的文件首先保存在服务器上的一个临时位置,然后才实际保存到其最终位置。目标文件的名称可以是硬编码的,也可以从文件名属性中获取request.files[file]目的。但是,建议使用secure_filename()功能。
    可以在 Flask 对象的配置设置中定义默认上传文件夹的路径和上传文件的最大大小。
    app.config['UPLOAD_FOLDER'] 定义上传文件夹的路径
    app.config['MAX_CONTENT_PATH'] 指定要上传的文件的最大大小——以字节为单位
    下面的代码有‘/upload’显示的 URL 规则‘upload.html’从模板文件夹中,和‘/upload-file’调用的 URL 规则uploader()函数处理上传过程。
    ‘upload.html’有一个文件选择器按钮和一个提交按钮。
    
    <html>
       <body>
          <form action = "http://localhost:5000/uploader" method = "POST" 
             enctype = "multipart/form-data">
             <input type = "file" name = "file" />
             <input type = "submit"/>
          </form>
       </body>
    </html>
    
    您将看到如下所示的屏幕。
    Flask 文件上传
    点击Submit选择文件后。表单的 post 方法调用‘/upload_file’网址。底层函数uploader()执行保存操作。
    以下是 Flask 应用程序的 Python 代码。
    
    from flask import Flask, render_template, request
    from werkzeug import secure_filename
    app = Flask(__name__)
    @app.route('/upload')
    def upload_file():
       return render_template('upload.html')
       
    @app.route('/uploader', methods = ['GET', 'POST'])
    def upload_file():
       if request.method == 'POST':
          f = request.files['file']
          f.save(secure_filename(f.filename))
          return 'file uploaded successfully'
          
    if __name__ == '__main__':
       app.run(debug = True)