儲存伺服器上傳內容
request.files
中提供了上傳的檔案, MultiDict
對映欄位名稱為檔案物件。如果使用相同的欄位名稱上傳多個檔案,請使用 getlist
- 而不是 []
或 get
。
request.files['profile'] # single file (even if multiple were sent)
request.files.getlist('charts') # list of files (even if one was sent)
request.files
中的物件有一個 save
方法,可以在本地儲存檔案。建立一個公共目錄以儲存檔案。
filename
屬性是檔案上傳的名稱。這可以由客戶端任意設定,因此通過 secure_filename
方法傳遞它以生成有效且安全的名稱以另存為。 這不能確保名稱是唯一的,因此現有檔案將被覆蓋,除非你執行額外的工作來檢測它。
import os
from flask import render_template, request, redirect, url_for
from werkzeug import secure_filename
# Create a directory in a known location to save files to.
uploads_dir = os.path.join(app.instance_path, 'uploads')
os.makedirs(uploads_dir, exists_ok=True)
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
# save the single "profile" file
profile = request.files['profile']
profile.save(os.path.join(uploads_dir, secure_filename(profile.filename)))
# save each "charts" file
for file in request.files.getlist('charts'):
file.save(os.path.join(uploads_dir, secure_filename(file.name)))
return redirect(url_for('upload'))
return render_template('upload.html')