把第一次做的上傳zip文件,代碼和報錯記錄下來:
需求:在頁面中選擇好zip文件路徑,點擊上傳按鈕,把zip文件保存到項目目錄下,並解壓到一個文件夾中,同時刪除zip文件,讀取解壓后文件中host.txt的文件信息
上傳文件代碼參考:flask中文文檔,鏈接如下:http://docs.jinkan.org/docs/flask/patterns/fileuploads.html
好啦,開始啦·········
(下面是全部的主函數)
import os
from flask import Flask, request, redirect, url_for, render_template
from werkzeug.utils import secure_filename
import shutil
import time
base_dir = os.path.abspath(os.path.dirname(__file__))#獲取當前項目路徑
print(base_dir)#此處為驗證信息
ALLOWED_EXTENSIONS = set(['zip'])#允許文件上傳的格式
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = base_dir
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
#secure_filename方法解釋:如果用戶上傳了一個非常復雜的路徑/File/xxx/mmm/lll/oracle20180903.zip,
你將會把這個字符串與上面的指定路徑相連接,這樣用戶就有能力修改服務器文件系統上的一個文件,而他不應該擁有這
樣的權限,所以使用該函數。
allowed_file函數是用來判定上傳的文件格式是否是允許的格式
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))#壓縮文件保存在項目路徑下
local_dir = os.path.join(base_dir,'11')#新創建一個路徑,用來放壓縮后的文件
hh=os.path.join(base_dir,filename)#這個是找到壓縮文件路徑-------C:/Code/haha.zip
print(hh)
print(local_dir)
shutil.unpack_archive(filename=hh, extract_dir=local_dir)把C:/Code/haha.zip保存在剛剛設定好的路徑下
os.remove(hh)#最后把壓縮文件刪除
filename = filename.split('.')[0]
print(filename)#此處為驗證信息
host_path = os.path.join(local_dir,filename, 'host.txt')#host.txt的路徑
with open(host_path, 'r') as f:#把host文件打開
key, values = [i.replace('\n', '').split(',') for i in f.readlines()]#列表推倒式,生成一個由鍵組成的列表,一個由值組成的列表
hostvalue = dict(zip(key, values))#把兩個列表組成字典
print(hostvalue)
ip = hostvalue['host_os_ip']#開始讀取里面的信息
systemname = hostvalue['host_database_bussines']
databasename = hostvalue['host_database_instance']
uploadtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(ip,systemname,databasename,uploadtime)
return render_template('notice.html',filename=filename)
if request.method =='GET':
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
==============================================================================================================================
記錄一下遇到的報錯信息:
==============================================================================================================================
因為當時限制的格式是zip但是我傳的卻是rar

說沒有找到這個文件,是因為host.txt文件並不是在11文件夾下,11下面還有一個當時上傳的壓縮包的名字,大概路徑是這樣的:11/ORCL_20180509151053/host.txt
注意:不能直接用11與filename相加,因為此時的filename是ORCL_20180509151053.zip,所以要先進行切片,把.zip去掉
運行過程中還出現了一個問題:(可能是個人電腦原因,並沒有反復運行,但是總是出現之前跑過得代碼的界面,既是代碼改過,還是出現之前的,甚至是前一天的)
我的解決方法是:cmd中查看執行中的進程tasklist
然后tskill python
然后執行就沒問題了
這個問題:當前環境中Flask-SQLAlchemy==2.2版本,只需要把Flask-SQLAlchemy換成2.1版本的就行了
終端輸入命令:pip install Flask-SQLAlchemy==2.1