广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 文件下载之断点续传的实现
  • 953
分享到

python 文件下载之断点续传的实现

2024-04-02 19:04:59 953人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1.前序2.技术原理2.1 Content-Range2.2 Range3. 代码实现1.前序 当下载突然断开后,断点续传就需要了,继续前面下载的内容下载。解决了不需要重复下载

1.前序

当下载突然断开后,断点续传就需要了,继续前面下载的内容下载。解决了不需要重复下载

2.技术原理

Http/1.1 开始支持断点续传,一般断点下载会用到 Range 和 Content-Range 实体头
Range是请求头,Content-Range是响应头

2.1 Content-Range

用于响应头中

语法:

Content-Length: <length>

2.2 Range

RangeHTTP 请求头表示服务器应返回的文档部分。可以同时用一个头请求多个部件,服务器可以在多部分文档中发回这些范围。如果服务器发回范围,则使用 206 部分内容进行响应。如果范围无效,服务器会返回 416 范围不可满足的错误。服务器还可以忽略标题,然后返回整个文档,并返回 200 状态代码。

语法:

Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>
Range: <unit>=-<suffix-length>

unit:指定范围的单位,通常是bytes。
range-start:指示请求范围开始的给定单元中的整数。
range-end:给定单元中的整数,指示所请求范围的末尾。此值是可选的,如果省略,文档的末尾将被视为范围的末尾。
suffix-length:给定单位中的整数,指示要返回的文件末尾的单位数。

例子:
(1)从文件中请求三个范围。第一个范围为第200字节到第1000个字节的位置;第二个范围为第2000个字节位置到第6576个字节的位置;第三个范围为第19000字节位置之后的全部

Range: bytes=200-1000, 2000-6576, 19000-

(2)请求文件的前 500 和最后 500 字节。如果范围重叠,服务器可能会拒绝该请求。

Range: bytes=0-499, -500

3. 代码实现


import requests
import os
headers = {
    'user-agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
}
file_path = './video/1.mp4' # 存储地址
url = 'https://v3-dy-o.zjcdn.com/410b9087e76fe2360e320463f8586ed8/6185ea7a/video/tos/cn/tos-cn-ve-15-alinc2/62427caf076b4d7d9dbbdbea98f97c9f/?a=6383&br=2690&bt=2690&cd=0%7C0%7C0&ch=26&cr=0&cs=0&cv=1&dr=0&ds=3&er=&ft=jal9w1-eTz7ThWR7Wlct&l=021636162458101fdbd400a040000000a70125e00000141b4be97&lr=all&mime_type=video_mp4&net=0&pl=0&qs=0&rc=M3U8bDw6ZmZsODMzNGkzM0ApPDY3Ozs7Mzw7NzY6N2g0aWdqNGVfcjRnZG5gLS1kLTBzczU2MV40Ly40NmAtLV8xLWI6Yw%3D%3D&vl=&vr='
r = requests.get(url,headers=header)
total_size = int(r.headers['Content-Length']) # 查看文件大小,并转换为整数类型
print(r.headers)
# 查看本地下载了多少
if os.path.exists(file_path):
    temp_size = os.path.getsize(file_path)  # 本地已经下载的文件大小
else:
    temp_size = 0

print('已下载:' + temp_size) 
print('总共需要下载:' + total_size)
header['Range'] = 'bytes={}-'.fORMat(temp_size) # 向头加入Range信息
print(header) # 打印头信息
r = requests.get(url, headers=header, stream=True)
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)
                

现在不知到怎么做突然下载被停止后,数据能写入文件了,所以现在是手动模拟下载断开。

在写入文件中加入了一个判断,当文件下载了5M时停止下载,之后再删掉这段代码,在重新下载。


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)
                if temp_size > 1024 *1024 * 5:
                    break

第一次下载

在这里插入图片描述


第二次下载

在这里插入图片描述

到此这篇关于python 文件下载之断点续传的实现的文章就介绍到这了,更多相关Python 断点续传内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python 文件下载之断点续传的实现

本文链接: https://www.lsjlt.com/news/156730.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 文件下载之断点续传的实现
    目录1.前序2.技术原理2.1 Content-Range2.2 Range3. 代码实现1.前序 当下载突然断开后,断点续传就需要了,继续前面下载的内容下载。解决了不需要重复下载 ...
    99+
    2022-11-12
  • C#怎样实现文件下载断点续传
    目录前言文件下载-服务端使用a标签提供文件下载使用Response.TransmitFile提供文件下载其他方式文件下载文件下载-客户端直接下载异步下载断点续传断点续传(服务端的支持...
    99+
    2022-11-12
  • Android(Java)下载断点续传的实现
    Android(Java)下载断点续传的实现一、要注意的地方1. 追加文件2. 跳过输入流3.range header坑点1.坑点2坑点3.二、...
    99+
    2022-06-06
    JAVA 断点续传 断点 Android
  • golang实现多协程下载文件(支持断点续传)
    引言 写这篇文章主要是周末休息太无聊,看了看别人代码,发现基本上要么是多协程下载文件要么就只有单协程的断点续传,所以就试了试有进度条的多协程下载文件(支持断点续传) packa...
    99+
    2022-11-12
  • php怎么实现下载断点续传
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php怎么实现下载断点续传?PHP实现文件下载,支持断点续传我一般废话比较少,直接甩代码,不懂扣我,再不懂就只能扣脚丫了,OK?PHP实现文件下载接口,支持断点续传,...
    99+
    2022-11-06
  • php如何实现下载断点续传
    本篇内容介绍了“php如何实现下载断点续传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现下载断点续传的方法:1、创建一个php示例...
    99+
    2023-07-04
  • java实现文件的断点续传
    所谓文件的断点续传,就是一个线程传输文件,另一个线程控制传输标识,以达到暂停文件效果、恢复文件上传的效果。 本demo使用最基本的线程之间的通信来实现一个简单的断点续传。 packa...
    99+
    2022-11-13
  • iOS使用NSURLConnection实现断点续传下载
    本文实例为大家分享了iOS使用NSURLConnection实现断点续传下载的具体代码,供大家参考,具体内容如下 一.断点续传的原理 断点续传的原理:每次在想服务器请求下载数据的同时...
    99+
    2022-11-13
  • Java实现多线程下载和断点续传
    java的多线程下载能够明显提升下载的速度,平时我们用的迅雷软件之所以能够下载那么快,就是使用了多线程;当用户在下载的过程中,有断电或断网的可能,当用户再次点击下载时,应该让用户接着...
    99+
    2022-11-13
  • Vue 大文件上传和断点续传的实现
    目录文件上传的 2 套方案基于文件流(form-data)客户端把文件转换为 base64大文件上传获取到文件对象并转成 ArrayBuffer 对象创建切片发送请求所有切片发送成功...
    99+
    2022-11-12
  • android实现多线程下载文件(支持暂停、取消、断点续传)
    多线程下载文件(支持暂停、取消、断点续传) 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责...
    99+
    2022-06-06
    多线程下载 多线程 断点续传 断点 线程 Android
  • iOS怎么使用NSURLConnection实现断点续传下载
    本篇内容介绍了“iOS怎么使用NSURLConnection实现断点续传下载”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一.断点续传的原理...
    99+
    2023-06-30
  • java实现多线程文件的断点续传
    java文件的多线程断点续传大致原理,供大家参考,具体内容如下 谈到文件断点续传那么就离不开java.io.RandomAcessFile HttpUrlConnection类 大致...
    99+
    2022-11-13
  • Html5大文件断点续传的实现方法
    本篇内容介绍了“Html5大文件断点续传的实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • Vue+Node实现大文件上传和断点续传
    目录源代码Blob.slice切片初始化文件内容FormData.append()大文件上传断点续传代码创建切片源码worker 线程通讯的逻辑断点续传秒传源代码 断点续传、分片上传...
    99+
    2022-11-13
  • 利用断点续传实现下载的原理是什么
    今天就跟大家聊聊有关利用断点续传实现下载的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。HTTP断点续传报文要实现HTTP断点续传必须要简单了解以下几个报文。Accept-...
    99+
    2023-05-31
    断点续传
  • Flutter实现资源下载断点续传的示例代码
    目录协议梳理实现步骤写在最后协议梳理 一般情况下,下载的功能模块,至少需要提供如下基础功能:资源下载、取消当前下载、资源是否下载成功、资源文件的大小、清除缓存文件。而断点续传主要体现...
    99+
    2022-11-13
  • Android通过HTTP协议实现断点续传下载实例
    整理文档,搜刮出一个Android通过HTTP协议实现断点续传下载的代码,稍微整理精简一下做下分享。 FileDownloader.java   ...
    99+
    2022-06-06
    HTTP 断点续传 断点 http协议 Android
  • Android实现网络多线程断点续传下载实例
    我们编写的是Andorid的HTTP协议多线程断点下载应用程序。直接使用单线程下载HTTP文件对我们来说是一件非常简单的事。那么,多线程断点需要什么功能? 1.多线程下载, ...
    99+
    2022-06-06
    多线程 断点续传 断点 线程 Android
  • 通过Java实现文件断点续传功能
    目录什么是断点续传解决方案效果演示参考代码前端后端什么是断点续传 用户上传大文件,网络差点的需要历时数小时,万一线路中断,不具备断点续传的服务器就只能从头重传,而断点续传就是,允许用...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作