Python 检测下载 JPG文件是否完整

截屏2023-01-02 18.29.52.png


问题


文件下载不完整,图片下载半截灰色图块,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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容