在Flask中處理文件上傳非常簡(jiǎn)單。 它需要一個(gè)enctype屬性設(shè)置為'multipart/form-data'的HTML表單,將該文提交到指定URL。 URL處理程序從request.files[]對(duì)象中提取文件并將其保存到所需的位置。
每個(gè)上傳的文件首先保存在服務(wù)器上的臨時(shí)位置,然后再保存到最終位置。 目標(biāo)文件的名稱可以是硬編碼的,也可以從request.files [file]對(duì)象的filename屬性中獲取。 但是,建議使用secure_filename()函數(shù)獲取它的安全版本。
可以在Flask對(duì)象的配置設(shè)置中定義默認(rèn)上傳文件夾的路徑和上傳文件的最大大小。
變量 | 說明 |
app.config[‘UPLOAD_FOLDER’] | 定義上傳文件夾的路徑 |
app.config[‘MAX_CONTENT_PATH’] | 指定要上傳的文件的最大大小 - 以字節(jié)為單位 |
以下代碼具有URL: /upload 規(guī)則,該規(guī)則顯示templates文件夾中的upload.html文件,以及調(diào)用uploader()函數(shù)處理上傳過程的URL => /upload-file規(guī)則。
upload.html有一個(gè)文件選擇器按鈕和一個(gè)提交按鈕。
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.com # Date : 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>
將看到如下截圖所示 -
選擇文件后點(diǎn)擊 提交。 表單的post方法調(diào)用URL=> /upload_file。 底層函數(shù)uploader()執(zhí)行保存文件操作。
以下是Flask應(yīng)用程序的Python代碼。
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.com # Date : 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)
運(yùn)行程序后,執(zhí)行上面代碼,選擇一個(gè)圖片文件,然后點(diǎn)擊上傳,得到以下結(jié)果 -