Skip to content

feat: v1.8.0 - 全新进度条显示、大文件分片下载、断点续传等重大更新#26

Open
Potterluo wants to merge 15 commits intotopcss:mainfrom
Potterluo:feature/v1.8.0-enhancements
Open

feat: v1.8.0 - 全新进度条显示、大文件分片下载、断点续传等重大更新#26
Potterluo wants to merge 15 commits intotopcss:mainfrom
Potterluo:feature/v1.8.0-enhancements

Conversation

@Potterluo
Copy link
Contributor

概述

这是一个重大功能更新版本,包含全新的进度条显示、大文件分片下载、断点续传等多项改进。

主要更新内容

🎨 全新进度条显示

  • 多 Layer 同时显示:所有 Layer 的进度条同时显示,实时更新
  • Layer序号前置对齐:将Layer序号放在前面并右对齐,如 \⬇️ ( 5/15)\ 和 \⬇️ (10/15)\
  • 分片信息显示:大文件分片下载时显示 [1/23]\ 表示当前分片进度
  • 重试标识:下载重试时显示 \🔄3\(重试3次)
  • 断点续传标识:断点续传时显示 \📎\
  • 下载速度统计:底部实时显示下载速度

📦 大文件分片下载

  • 自动检测大文件:超过 50MB 的文件自动启用分片下载
  • 分片大小:默认每片 10MB,支持断点续传
  • 提高下载稳定性:单个分片失败不影响整体下载,自动重试
  • 合并后校验:所有分片合并后进行 SHA256 校验,确保完整性

🔄 断点续传

  • 下载中断后,再次运行相同命令会自动从断点继续下载
  • 支持网络中断、程序崩溃等场景的恢复
  • 进度文件保存在输出目录中

🛡️ 高可用性增强

  • 失败重试:认证最多3次、清单获取最多3次、文件下载最多10次
  • SHA256 校验:下载完成后自动校验文件完整性
  • 信号处理:支持 Ctrl+C 优雅退出,第一次保存进度,第二次强制退出

📁 输出目录优化

  • 新增 -o/--output\ 参数指定下载目录
  • 默认输出到当前目录下的 \镜像名_tag_arch\ 目录
  • 打包完成后自动清理 layers 目录

🔧 其他改进

  • 修复 manifest list 识别问题,正确识别多架构镜像
  • 显示单一架构镜像的实际架构信息
  • 抑制 requests/urllib3 版本警告信息

进度条格式示例

\
⬇️ ( 1/15) sha256:b42c8 |████████████░░░░░░░░░░░░░░░░░░| 35.2% 21.5MB/61.3MB [3/7]
⬇️ ( 5/15) sha256:52823 |████░░░░░░░░░░░░░░░░░░░░░░░░░░| 12.5% 27.7MB/221.7MB [1/23] 🔄2
⬇️ (10/15) sha256:f6521 |██░░░░░░░░░░░░░░░░░░░░░░░░░░░░| 8.3% 14.1MB/170.2MB 📎
✅ (15/15) sha256:30a14 |██████████████████████████████| 100.0% 151.5MB/4.2GB

📊 速度: 5.2MB/s
\\

符号说明

符号 含义
\⬇️\ 正在下载
\✅\ 已完成
[3/7]\ 分片进度:第3个分片,共7个分片
(5/15)\ Layer序号:第5个Layer,共15个Layer
\🔄3\ 重试次数:已重试3次
\📎\ 断点续传

测试

已在以下场景测试通过:

  • Docker Hub 公共镜像下载
  • Quay.io 多架构镜像下载
  • 私有仓库镜像下载
  • 大文件(4GB+)分片下载
  • 断点续传
  • Ctrl+C 中断处理

- 添加断点续传支持,下载中断后可继续
- 增强失败重试机制(认证3次、清单3次、下载10次)
- 添加SHA256校验,确保下载完整性
- 添加智能缓存管理(--list-cache, --clear-cache)
- 不同镜像使用独立缓存目录
- 添加下载统计(平均速度、总耗时)
- 支持 Ctrl+C 优雅退出并保存进度
- 优化代码结构,添加类型注解
- 更新 README 文档
- 新增 -o/--output 参数指定下载目录
- 默认输出到当前目录下的镜像名_tag_arch目录
- 多线程下载进度条分开展示,不再重叠
- 优化架构选择交互,显示可用架构列表
- 移除缓存到用户目录的功能,改为当前目录
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant