背景:
上一篇文章分享了一個本地的實作方案,但是這個盡管打包成exe的完整包的方式,由于實作方式是使用python,打包出來後的檔案裡包含了使用到的庫和python運作程式,啟動時内部會需要解壓出來,是以啟動會比較慢,大概3~5秒啟動,對于追求性能的優秀人才就會覺得這個效率太低了,那能不能實作一個web方案,這樣web端提供一個傳入需要轉換的檔案,然後傳回一個轉換好的檔案,這樣就不需要每個人的包都那麼大,運作還慢,而且還沒法實時更新。
解決方案:
1.通過web前端進行檔案上傳到伺服器上,設定一個送出頁面模闆檔案uploader.html
<html>
<head>
<meta charset="UTF-8">
<title>檔案上傳</title>
</head>
<body>
<form action="/uploadfile" method="POST" enctype="multipart/form-data">
<input type="file" name="uploadfile" />
<input type="submit" value="送出" />
</form>
</body>
</html>
2.建立一個接口進行檔案的上傳,利用flask進行接口生成
from flask import Flask
from biz.openapi.com_api_webres import blue_webres_mgr
webapp = Flask(__name__, template_folder='../biz/templates')
webapp.register_blueprint(blueprint=blue_webres_mgr)
if __name__ == '__main__':
webapp.run(port=8083)
blue_webres_mgr = Blueprint('webres_mgr', __name__, template_folder='../templates')
webconfig = {}
webconfig['UPLOAD_FOLDER'] = '../upload/'
@blue_webres_mgr.route('/upload')
def upload_file():
return render_template('uploader.html')
@blue_webres_mgr.route('/uploadfile',methods=['GET','POST'])
def uploader_File():
if request.method == 'POST':
f = request.files['uploadfile']
basefilepath = os.path.join(webconfig['UPLOAD_FOLDER']) + f.filename
newfilename = ''
if os.path.exists(basefilepath):
fileext = os.path.splitext(f.filename)[-1]
filename = os.path.basename(f.filename).split(fileext)[0]
newfilename = "{}_{}{}".format(filename, int(time.time()), fileext)
basefilepath = "{}{}".format(os.path.join(webconfig['UPLOAD_FOLDER']),newfilename)
f.save(basefilepath)
transcsv = TransCSVDataToSql(basefilepath)
filepath, webdir, sqlfile = transcsv.TransFile()
linkurl = 'http://127.0.0.1/{}/{}'.format(webdir, sqlfile)
return render_template('downloadsql.html',transfile= f.filename,respath=filepath,linkurl=linkurl, sqlfile=sqlfile)
else:
return render_template('uploader.html')
3.利用nginx建立一個web網站服務,可以直接使用phpstudy一鍵部署
啟動nginx就可以了,當然如果需要配置不同的端口,還有位址的,自行通過配置按鈕進行配置
4.調用上一篇文章中的檔案讀取,轉換的實作類進行檔案的轉換和存儲
轉換後的檔案直接存放到web網站的www下的工程目錄下
首先配置好自己的目錄位址
def __init__(self, csvFile:str):
self.CSVFile = csvFile
# 儲存的檔案名
self.SaveFile = 'trans_{}.sql'.format(time.time())
# 項目儲存的目錄
self.WebDir = 'softfiles'
# phpstudy指定的www所在目錄+項目的目錄
self.WebbasePath = 'D:/phpstudy_pro/WWW/softfiles/'
配置的是WWW就是網站下的softfiles目錄下
5.輸出網站可以通路到的頁面下載下傳位址
配置web可以通路的到的位址
linkurl = 'http://127.0.0.1/{}/{}'.format(webdir, sqlfile)
如果釋出在公網或者内網上,則把127.0.0.1的IP更改為部署好的伺服器域名或IP即可
配置下載下傳頁面的html模闆downloadsql.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>轉換好的sql</title>
</head>
<body>
<table border="1">
<tr>
<th>檔案所在路徑</th>
<th>需要轉換的csv檔案</th>
<th>轉換完成的sql檔案</th>
<th>下載下傳位址</th>
</tr>
<tr>
<td>{{respath}}</td>
<td>{{transfile}}</td>
<td>{{sqlfile}}</td>
<td><a href={{linkurl}}>下載下傳位址</a></td>
</tr>
</table>
</body>
</html>
6.來看看最終的效果吧
啟動服務端,
啟動Nginx,在浏覽器中輸入
127.0.0.1:8083/upload
出現頁面
然後點選浏覽,打開導出的csv檔案
選擇好後點選打開,最後點選頁面中的“送出”按鈕
會展現一個下載下傳頁面位址
點選下載下傳位址即可進行轉換後的檔案的下載下傳,然後就可以使用這個sql腳本進行刷庫了
結語:
通過這個web端的轉換,對于使用使用者來說,隻需要輸入一個位址,然後上傳檔案即可完成轉換工作,比本地版要快速很多,而且隻要web端更新了新的解析規則,自己都不需要去處理,自然就能使用到最新的,啟動效率也是大大提升。
好了,今天的分享就到這了,感謝大家的閱讀!