在Flask中實現(xiàn)文件上傳功能的完整步驟如下:1?? 創(chuàng)建包含文件輸入字段和提交按鈕的HTML表單,設(shè)置enctype="multipart/form-data"以支持文件上傳;2?? 在Flask後端定義路由處理GET和POST請求,使用request.files獲取上傳文件,通過secure_filename對文件名進(jìn)行安全處理,併校驗文件擴(kuò)展名是否在允許列表內(nèi),確認(rèn)無誤後將文件保存到指定目錄,同時設(shè)置MAX_CONTENT_LENGTH限制上傳大小以增強(qiáng)安全性;3?? 提供上傳文件訪問路由,使用send_from_directory函數(shù)安全地返回文件;4?? 確保項目結(jié)構(gòu)包含templates和uploads目錄,並正確安裝Flask依賴;5?? 運(yùn)行app.py啟動服務(wù),通過瀏覽器訪問上傳頁面完成測試。該方案已涵蓋基本上傳、安全防護(hù)及文件訪問,適用於學(xué)習(xí)和中小型項目。

在Flask 中實現(xiàn)文件上傳功能非常簡單。下面是一個完整的、可運(yùn)行的示例,展示如何使用Flask 接收用戶上傳的文件,並保存到服務(wù)器指定目錄。

? 基本功能
- 用戶通過表單上傳文件
- Flask 後端接收並保存文件
- 防止惡意文件名(安全處理)
- 支持常見文件類型(如圖片、文檔等)
? 項目結(jié)構(gòu)
flask-upload/
│
├── app.py
├── uploads/ # 上傳的文件將保存在這裡├── templates/
│ └── upload.html # 前端頁面
1?? 創(chuàng)建HTML 表單( templates/upload.html
)
<!DOCTYPE html>
<html>
<head>
<title>上傳文件</title>
</head>
<body>
<h2>上傳文件</h2>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file" required>
<button type="submit">上傳</button>
</form>
{% if filename %}
<p>上傳成功! <a href="{{ url_for('uploaded_file', filename=filename) }}">查看文件</a></p>
{% endif %}
</body>
</html>
2?? Flask 後端代碼( app.py
)
import os
from flask import Flask, request, render_template, send_from_directory
from werkzeug.utils import secure_filename
# 配置UPLOAD_FOLDER = 'uploads'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'docx'}
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制最大上傳16MB
# 檢查文件擴(kuò)展名是否允許def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
# 檢查是否有文件上傳if 'file' not in request.files:
return '沒有文件部分'
file = request.files['file']
# 檢查用戶是否選擇了文件if file.filename == '':
return '未選擇文件'
# 安全檢查並保存if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return render_template('upload.html', filename=filename)
else:
return '不支持的文件類型! '
return render_template('upload.html')
# 提供上傳文件的訪問路由@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
if __name__ == '__main__':
# 確保上傳目錄存在os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.run(debug=True)
3?? 運(yùn)行步驟
安裝Flask:
pip install flask
創(chuàng)建目錄和文件:

- 創(chuàng)建
uploads/
目錄 - 創(chuàng)建
templates/upload.html
運(yùn)行應(yīng)用:
python app.py
打開瀏覽器訪問:

http://127.0.0.1:5000
? 安全建議
- 使用
secure_filename()
防止路徑遍歷攻擊
- 限製文件大?。?
MAX_CONTENT_LENGTH
)
- 校驗文件擴(kuò)展名
- 生產(chǎn)環(huán)境不要直接提供用戶文件下載,建議加權(quán)限控制
? 可選增強(qiáng)功能
- 文件重命名(避免覆蓋):
filename = str(uuid.uuid4()) ext
- 檢查文件內(nèi)容類型(MIME 類型)
- 上傳進(jìn)度條(需前端JS 配合)
- 存儲到雲(yún)存儲(如S3、OSS)
基本上就這些,這個例子足夠用於學(xué)習(xí)和中小型項目。簡單但涵蓋了關(guān)鍵點(diǎn):表單、後端接收、安全處理、文件保存和訪問。
以上是Python燒瓶上傳文件示例的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!