本地文件读取
def get_file_md5(file):
f_md5 = hashlib.md5(file.read())
return f_md5.hexdigest()
if __name__ == '__main__':
file = f"{filepath}"
with open(file,"rb") as f:
md5 = get_file_md5(f)
如果是FileStorage类型:
@api.route('/data_upload', methods=['GET', 'POST'])
def data_upload():
file = request.files.get("file")
md5 = get_file_md5(file)
print(md5)
#d9e22fa48bba3ee1a85804b12409953c
但是当我们在计算md5之前,进行过其他某种读取FileStorage的操作
例如对文件进行某些逻辑处理,那么计算的md5就会发现与源文件不一致。
@api.route('/data_upload', methods=['GET', 'POST'])
def data_upload():
file = request.files.get("file")
save_data(file) #例如对文件进行保存,或是正式的业务处理
md5 = get_file_md5(file)
print(md5)
#444754b85b0b66b217d9ab9a5c6aa1e5
这是因为已经对文件流执行了read,所以需要seek回到文件的开头才能成功计算,同样适用于保存文件发现不成功的时候,不单单为计算md5。
def get_file_md5(file):
file.seek(0) #回到文件开头
f_md5 = hashlib.md5(file.read())
return f_md5.hexdigest()
@api.route('/data_upload', methods=['GET', 'POST'])
def data_upload():
file = request.files.get("file")
md5 = get_file_md5(file)
print(md5)
#d9e22fa48bba3ee1a85804b12409953c



