English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Subida de archivos de Flask

在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有一个文件选择器按钮和一个提交按钮。

# Nombre de archivo : example.py
# Copyright : 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha : 2020-08-08
<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>

将看到如下截图所示 -

选择文件后点击 提交. El método post del formulario llama a la URL=> /La función subyacente uploader() del upload_file. Ejecuta la operación de guardar el archivo.

A continuación se muestra el código Python de la aplicación Flask.

# Nombre de archivo : example.py
# Copyright : 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha : 2020-08-08
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)

Después de ejecutar el programa, ejecute el código anterior, seleccione un archivo de imagen y luego haga clic en subir, obtendrá el siguiente resultado -