讲师中心 微信公众号
AI工具推荐 视频效率加速

如何使用Python Flask实现断点续传功能的后端逻辑?

大枫同学_9656

大枫同学_9656

发布时间:2026-07-15 12:07:44

|

991人浏览过

|

来源于php中文网

原创

Flask需手动实现断点续传:解析Range头提取字节范围,返回206响应并设置Content-Range;用seek()和read()安全读取大文件指定段;上传端通过分块上传+合并,配合临时文件与状态管理;注意Content-Range格式、416错误处理及代理兼容性。

如何使用python flask实现断点续传功能的后端逻辑?

Flask 本身不内置断点续传支持,但可以通过标准 HTTP 头(Range、Content-Range、206 Partial Content)和文件系统操作手动实现。关键在于正确解析请求范围、校验文件状态、返回对应字节块,并保持客户端能持续拼接。

如何处理 Range 请求并返回 206 响应

客户端发起断点续传时,会在请求头中携带 Range: bytes=1024- 或 Range: bytes=1024-2047。Flask 需从中提取起始、结束位置,并确保响应状态码为 206、响应头含 Content-Range 和 Accept-Ranges: bytes。

  • 用 request.headers.get("Range") 获取原始 Range 字符串,再正则或字符串切分提取数值
  • 若未提供 Range,直接返回 200 全量响应(兼容普通下载)
  • 结束位置未指定(如 bytes=1024-)时,需设为 file_size - 1;超出文件大小则按实际截断
  • 响应体必须是原始字节流(io.BytesIO 或 open(..., "rb") 的 read() 结果),不能经 JSON 序列化

如何安全读取大文件的指定字节段

避免把整个文件加载进内存,尤其对 GB 级上传/下载场景。应使用偏移量跳转 + 定长读取,配合 seek() 和 read() 控制 I/O。

  • 打开文件时用 open(filepath, "rb"),不要用文本模式
  • 调用 f.seek(start_byte) 跳转到起始位置,再 f.read(end_byte - start_byte + 1) 读取
  • 务必检查 start_byte < file_size,否则返回 416 Requested Range Not Satisfiable
  • 若文件在读取中被删除或截断,os.stat() 可提前校验,或捕获 OSError 回退处理

如何支持上传端的断点续传(分块合并)

上传断点续传本质是“分块上传 + 合并”,需额外维护上传状态(如临时文件名、已接收块列表、总大小)。Flask 接口需区分初始化、追加、完成三类请求。

Shadows Python Sensei
Shadows Python Sensei

Python 最佳实践助手——代码规范、设计模式、性能优化、测试与类型注解。适用于编写或审查 Python 代码。

下载

立即学习“Python免费学习笔记(深入)”;

  • 初始化:客户端 POST /upload/init 携带 filename 和 total_size,服务端生成唯一 upload_id 并创建空临时文件(如 /tmp/upload_{upload_id}.part)
  • 追加:客户端 PUT /upload/chunk?upload_id=xxx&offset=1024,服务端用 seek(offset) 写入,同时记录该 offset 已写入
  • 完成:客户端 POST /upload/complete?upload_id=xxx,服务端校验所有块是否齐备(可选 MD5 分块校验),然后重命名为目标文件
  • 临时文件建议加锁(threading.Lock 或基于文件名的简单互斥),防止同一 upload_id 并发写入错乱

容易忽略的边界与兼容性问题

浏览器、wget、curl 对 Range 解析略有差异;移动端 SDK 更可能静默降级。真正跑通需要验证多个客户端行为。

  • Content-Range 响应头格式必须严格为 bytes 1024-2047/10000(注意空格和斜杠),少一个字符就导致 Chrome 拒绝续传
  • 某些代理或 CDN 会过滤或改写 206 响应,建议在 Nginx 层显式开启 underscores_in_headers on; 并透传 Range 相关头
  • 上传合并时若客户端崩溃,需配套清理机制(如定时扫描过期 .part 文件),否则磁盘会被占满
  • Flask 开发服务器(app.run())不支持并发长连接,测试断点续传务必用 gunicorn 或 waitress

断点续传的健壮性不在逻辑多复杂,而在每处 HTTP 头是否精准、每个文件偏移是否校验、每次写入是否幂等。最常出问题的是 Content-Range 格式错误和未处理 416 场景,这两处建议先写单元测试覆盖。

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2143

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

5730

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

5026

2024.03.19

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1591

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

3824

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1609

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

22077

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2707

2023.08.04

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python Web框架Flask进阶视频教程
Python Web框架Flask进阶视频教程

共12课时 | 3.3万人学习

Python Web框架Flask入门视频教程
Python Web框架Flask入门视频教程

共7课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn