Python第一次做上传文件

Posted 菜鸟growing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python第一次做上传文件相关的知识,希望对你有一定的参考价值。

把第一次做的上传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

以上是关于Python第一次做上传文件的主要内容,如果未能解决你的问题,请参考以下文章

记录python上传文件的坑

树莓派 python 如何将本地文件上传到指定的服务器页面上

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

我该如何做模态对话框片段(代码在我关闭之前不会执行)

scrapy主动退出爬虫的代码片段(python3)

scrapy按顺序启动多个爬虫代码片段(python3)