Flask - Tải lên tệp

Xử lý tải lên tệp trong Flask rất dễ dàng. Nó cần một biểu mẫu HTML với thuộc tính enctype được đặt thành 'multiart / form-data', đăng tệp lên một URL. Trình xử lý URL tìm nạp tệp từrequest.files[] và lưu nó vào vị trí mong muốn.

Mỗi tệp được tải lên lần đầu tiên được lưu ở một vị trí tạm thời trên máy chủ, trước khi nó thực sự được lưu vào vị trí cuối cùng. Tên của tệp đích có thể được mã hóa cứng hoặc có thể lấy từ thuộc tính tên tệp củarequest.files[file]vật. Tuy nhiên, bạn nên tải phiên bản an toàn của nó bằng cách sử dụngsecure_filename() chức năng.

Có thể xác định đường dẫn của thư mục tải lên mặc định và kích thước tối đa của tệp tải lên trong cài đặt cấu hình của đối tượng Flask.

app.config ['UPLOAD_FOLDER'] Xác định đường dẫn cho thư mục tải lên
app.config ['MAX_CONTENT_PATH'] Chỉ định kích thước tối đa của tệp được tải lên - tính bằng byte

Đoạn mã sau có ‘/upload’ Quy tắc URL hiển thị ‘upload.html’ từ thư mục mẫu và ‘/upload-file’ Quy tắc URL gọi uploader() chức năng xử lý quá trình tải lên.

‘upload.html’ có nút chọn tệp và nút gửi.

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

Bạn sẽ thấy màn hình như hình dưới đây.

Nhấp chuột Submitsau khi chọn tệp. Phương thức đăng của biểu mẫu gọi‘/upload_file’URL. Chức năng cơ bảnuploader() không lưu hoạt động.

Sau đây là mã Python của ứng dụng Flask.

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)