zoukankan      html  css  js  c++  java
  • 大文件断点下载

    import sys, requests, os
    
    # 屏蔽warning信息
    requests.packages.urllib3.disable_warnings()
    
    def download(url, file_path):
        # 第一次请求是为了得到文件总大小
        r1 = requests.get(url, stream=True, verify=False)
        total_size = int(r1.headers['Content-Length'])
    
        # 这重要了,先看看本地文件下载了多少
        if os.path.exists(file_path):
            temp_size = os.path.getsize(file_path)  # 本地已经下载的文件大小
        else:
            temp_size = 0
        # 显示一下下载了多少
        print('本地已下载:', temp_size)
        print('文件总大小:', total_size)
        # 核心部分,这个是请求下载时,从本地文件已经下载过的后面下载
        headers = {'Range': 'bytes=%d-' % temp_size}
        # 重新请求网址,加入新的请求头的
        r = requests.get(url, stream=True, verify=False, headers=headers)
    
        # 下面写入文件也要注意,看到"ab"了吗?
        # "ab"表示追加形式写入文件
        with open(file_path, "ab") as f:
            for chunk in r.iter_content(chunk_size=1024):
                if chunk:
                    temp_size += len(chunk)
                    f.write(chunk)
                    f.flush()
    
                    ###这是下载实现进度显示####
                    done = int(50 * temp_size / total_size)
                    sys.stdout.write("
    [%s%s] %d%%" % ('█' * done, ' ' * (50 - done), 100 * temp_size / total_size))
                    sys.stdout.flush()
        print()  # 避免上面
     回车符
    
    
    if __name__ == '__main__':
        # link = r'https://nshlite.gph.netease.com/patch_20-08-26-18-30_20-09-02-12-00.lowp'
        # name = link.rsplit('/',1)[-1]
        link = r'xxx'
        name = 'xxx.xxx'
        path = fr'./{name}'
        # 调用一下函数试试
        download(link, path)
    
  • 相关阅读:
    数据库优化之三:数据表设计
    JavaScript:实现弹出框的选择(转载)
    HTML and CSS 之三
    容祖儿 《Jump Up 9492》[MP3!]
    微软的 3层结构教程
    CodeSmith
    Alienwave.CommunityServer 开发笔记 1
    Microsoft .NET Framework 3.0 预发行版本 2006年6月CTP
    三国无双 4 PC 版释出
    KOKIA 《THE POWER OF SMILE》单曲[MP3!]
  • 原文地址:https://www.cnblogs.com/dadazunzhe/p/13611984.html
Copyright © 2011-2022 走看看