Flask - 文件上传

在Flask中处理文件上传非常简单.它需要一个HTML表单,其enctype属性设置为'multipart/form-data',将文件发布到URL. URL处理程序从 request.files [] 对象中提取文件并将其保存到所需位置.

每个上传的文件首先保存在临时位置服务器,在它实际保存到其最终位置之前.目标文件的名称可以是硬编码的,也可以从 request.files [file] 对象的filename属性中获取.但是,建议使用 secure_filename()函数获取它的安全版本.

可以定义默认上传文件夹的路径和最大值Flask对象配置设置中上传文件的大小.

app.config ['UPLOAD_FOLDER ']定义上传文件夹的路径
app.config ['MAX_CONTENT_PATH']指定要上传的文件的最大大小 - 以字节为单位

以下代码包含'/upload'网址规则,该规则在templates文件夹中显示'upload.html',并且'/upload-file'调用 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文件上传

选择文件后点击提交. Form的post方法调用'/upload_file' URL.底层函数 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)