问题
文件下载不完整,图片下载半截灰色图块,zip 损坏。
通过对比本地文件子节与 requests.content
时常不起作用
解决
仅对比 jpg/jpeg/png/gif/zip
通过检查文件尾部固定子节来判断是否下载完整。不是所有文件的尾部都有固定子节
def check_integrality(filename: str) -> bool:
"""检查下载项完整性"""
with open(filename, "rb") as f:
f.seek(-30, 2)
hex_end = f.read()
suffix = filename.split(".")[-1].lower()
if suffix == "jpg" or suffix == "jpeg":
return hex_end.endswith(b"\xff\xd9")
if suffix == "png":
return hex_end.endswith(b"\x49\x45\x4e\x44\xae\x42\x60\x82")
if suffix == "gif":
return hex_end.endswith(b"\x00\x3b")
if suffix == "zip":
# 504b0506
return b"\x50\x4b\x05\x06" in hex_end
网友评论