天天看点

转换csv文件为插入的sql脚本【web端实现方案】

背景:

上一篇文章分享了一个本地的实现方案,但是这个尽管打包成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进行接口生成

转换csv文件为插入的sql脚本【web端实现方案】
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一键部署

转换csv文件为插入的sql脚本【web端实现方案】

启动nginx就可以了,当然如果需要配置不同的端口,还有地址的,自行通过配置按钮进行配置

转换csv文件为插入的sql脚本【web端实现方案】

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.来看看最终的效果吧

启动服务端,

转换csv文件为插入的sql脚本【web端实现方案】

启动Nginx,在浏览器中输入

127.0.0.1:8083/upload

出现页面

转换csv文件为插入的sql脚本【web端实现方案】

然后点击浏览,打开导出的csv文件

转换csv文件为插入的sql脚本【web端实现方案】

选择好后点击打开,最后点击页面中的“提交”按钮

会展现一个下载页面地址

转换csv文件为插入的sql脚本【web端实现方案】

点击下载地址即可进行转换后的文件的下载,然后就可以使用这个sql脚本进行刷库了

结语:

通过这个web端的转换,对于使用用户来说,只需要输入一个地址,然后上传文件即可完成转换工作,比本地版要快速很多,而且只要web端更新了新的解析规则,自己都不需要去处理,自然就能使用到最新的,启动效率也是大大提升。

好了,今天的分享就到这了,感谢大家的阅读!

继续阅读