利用web.py框架,判断服务器端的某文件的md5值是否正确。返回json格式数据,代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: feng minqiang <[email protected]>
# Maintainer: feng minqiang <[email protected]>
import web
import hashlib
import os,sys
#简单的测试一个字符串的MD5值
def GetStrMd5(src):
m0=hashlib.md5()
m0.update(src)
print m0.hexdigest()
#大文件的MD5值
def GetFileMd5(filename):
if not os.path.isfile(filename):
return
myhash = hashlib.md5()
f = file(filename,‘rb‘)
while True:
b = f.read(8096)
if not b :
break
myhash.update(b)
f.close()
return myhash.hexdigest()
def CalcSha1(filepath):
with open(filepath,‘rb‘) as f:
sha1obj = hashlib.sha1()
sha1obj.update(f.read())
hash = sha1obj.hexdigest()
print(hash)
return hash
def CalcMD5(filepath):
with open(filepath,‘rb‘) as f:
md5obj = hashlib.md5()
md5obj.update(f.read())
hash = md5obj.hexdigest()
#print(hash)
return hash
def diff_md5_file(filepath,md5_str):
_tmp_md5_str=CalcMD5(filepath)
if _tmp_md5_str == md5_str:
return True
else:
return False
def filelist(filepath=None,var_name=None):
_fd=open(filepath)
_buf=_fd.readlines()
_fd.close()
md5re={}
for i in _buf:
i=i.strip(‘\n‘).replace(" ",‘ ‘).split(‘ ‘)
_md5_str=i[0]
_file_name=i[1]
if var_name!=None:
_tmp_name=_file_name.split(".")[0]
if _tmp_name != var_name:
continue
_file_path=os.path.join(os.path.dirname(filepath),_file_name)
if not os.path.exists(_file_path):
md5re.update({_file_name:False})
continue
_Re=diff_md5_file(_file_path,_md5_str)
md5re.update({_file_name:_Re})
return md5re
class md5sum:
def GET(self):
data=web.input()
_version=None
_var_name=None
_len=len(data.items())
for i in data.items():
if i[0]=="PublicCloud":
_version=i[1]
if i[0]=="war":
_var_name=i[1]
if _version!=None:
_path="/opt/download/PublicCloud/web/"+_version
md5_file= _path + "/md5.txt"
if not os.path.exists(md5_file):
return None
if _var_name!=None:
return filelist(md5_file,_var_name)
return filelist(md5_file)
class index:
def GET(self):
return True
if __name__ == "__main__":
urls = (‘/md5‘,‘md5sum‘,
‘/‘,‘index‘)
app=web.application(urls, globals())
app.run()
利用spawn-fcgi 把该脚本挂在nginx下。命令如下(自己定义好自己的环境变量吧):
-d 脚本所在的目录
-s 该脚本的socket放置位置
-P 该脚本的PID文件放置位置
-- 运行的脚本(总入口)
spawn-fcgi -d $__rootdir -s $PWD/sock/$SOCKFILE -P "$PIDFILE" -- $PWD/pid/md5check.py fcgi
接口调用方法:
version 版本号
war 工程名称(对应的war包)
/md5?$domainname=$version&war=$projectname
返回具体某个war包的md5值是否正确。
/md5?$domainname=$version
返回该工程所有的包的md5值是否正确。