在單位內網環境中,我經常需要收集 pdf 格式的記錄表。于是我基于 ai ide,開發了一個基于 Flask 開發的輕量級文件上傳服務項目,部署在單位飛騰芯的銀河麒麟系統上(當然由于 python 的跨平臺,在 windows 和 mac 上也可部署),可以快速搭建一個文件收集平臺。
項目簡介
EasyUpload 是一個極簡的文件上傳與瀏覽服務,基于 Flask 開發。專門用于瑣碎文件收集的輕量級文件上傳服務。它具有以下特點:
- 簡單易用:支持拖拽上傳和點擊選擇文件
- 安全控制:支持密碼保護和IP限制
- 文件管理:提供文件瀏覽和下載功能
- 預覽功能:支持圖片、文本、PDF和Office文檔預覽
- 二維碼分享:可生成文件下載二維碼
項目截圖
核心功能實現
1. 文件上傳處理
項目的核心是文件上傳功能,通過/uploadFiles
路由處理:
@app.route('/uploadFiles', methods=['POST'])
def upload_files():# 處理多個文件上傳# 檢查文件類型和大小限制# 根據設備名重命名文件避免沖突
上傳的文件會按日期分類存儲,并根據設備名進行命名,防止文件名沖突。
2. 文件瀏覽功能
通過/browse
路由可以查看當天上傳的所有文件:
@app.route('/browse', methods=['GET'])
def browse_files():# 檢查權限和IP限制# 讀取當天上傳的文件列表# 提供文件類型、大小、上傳時間等信息
瀏覽頁面提供了豐富的功能:
- 顯示文件詳細信息(類型、大小、上傳時間)
- 支持文件預覽(文本、圖片、PDF、Office文檔)
- 提供下載鏈接和二維碼分享
3. 安全機制
項目實現了多層次的安全控制:
- 密碼保護:可以設置上傳密碼和超級管理員密碼
- IP限制:支持類似.gitignore的IP黑白名單規則
- 權限控制:區分普通用戶和超級用戶權限
def is_ip_blocked(ip: str, rules: List[str]) -> bool:"""類似 .gitignore 的匹配規則:- 支持通配符 * 和 ?- 支持 ! 開頭的白名單規則(優先級高于黑名單)- 白名單一旦匹配,立即放行"""
部署方式
項目支持多種部署方式:
- 開發環境:直接使用Flask內置服務器
- 生產環境:推薦使用Gunicorn(Linux)或Waitress(Windows)
# 安裝依賴
pip install Flask PyYAML qrcode[pil]# 開發環境運行
python app.py# 生產環境(Linux)
gunicorn -w 4 -b 0.0.0.0:8000 app:app# 生產環境(Windows)
waitress-serve --listen=0.0.0.0:8000 app:app
配置說明
通過user_settings.yml
文件可以輕松配置各項功能:
# 是否啟用文件瀏覽功能
browse_enabled: true# 上傳頁面密碼(留空則不啟用)
upload_password: ""# 是否啟用超級管理員功能
super_enabled: true# 超級管理員密碼
super_password: "admin123"# 文件大小限制(字節)
max_file_size: 104857600# 禁止上傳的文件類型
blacklist_extensions:- "exe"- "bat"- "sh"
總結
這個輕量級文件上傳服務項目展示了如何使用 Flask 快速構建一個實用的文件管理工具。它不僅功能完善,而且具有良好的安全性和可擴展性。通過簡單的配置,就可以滿足各種文件收集和分享需求。
項目代碼結構清晰,注釋詳細,非常適合Flask初學者學習參考。如果你有文件收集的需求,不妨試試這個工具,或者基于它進行二次開發,定制更符合自己需求的功能。