admin管理员组

文章数量:1606317

场景

超大文件现在还是蛮常用的,尤其使用第三方数据库(集)资料时,都需要先进行下载。这不一个朋友就遇到了这个需求:

100多个G,先不说电脑内存,就是硬盘一般人的办公电脑估计都得腾点空间出来,更别提下载了。即使能达到网速1M/s且保持不便,那也得30个小时吧,但是现实是几乎不太现实,因为网速很不稳定,如果网断了,没办法续传,需要重头开始下载,这就很难搞。so针对这种方式该怎么下载呢?

迅雷什么的是否可以下载我倒没有尝试? 不过看到过一个下载工具internetdownloadmanager(30天免费), 有兴趣的可以尝试下。这些工具先不说好不好用,绝大多数都需要VIP,甚至区分白金,黄金,钻石,星耀,王者,简直恶心死人。对于程序员,绝对不能惯着这些臭毛病,

思路:将大文件拆分成多个小文件单独下载,如果允许,你也可以多线程下载;下载完毕后,再将小文件们拼接在一起即可。

工具:Linux环境,curl, cat

难度: 对于程序员,几乎没有;对于非程序员,windows上安装curl工具比较靠谱点,也可以安装一个WSL子系统

操作步骤

1. 指定文件大小,逐个下载

比如我想下载那个100G的文件,准备拆分成100个文件,每个文件1G,然后使用curl工具分别下载,通过range指定下载文件的开始和结束位置:

curl --range 0-1024000000 -o test.part1 https://kero.hgc.jp/cgi-bin/download/long_read/adenocarcinoma_cell_lines/genome/promethion/LC2ad/PromethION_LC2ad_30x.sorted.bam

curl --range 1024000001-2048000000 -o test.part2 https://kero.hgc.jp/cgi-bin/download/long_read/adenocarcinoma_cell_lines/genome/promethion/LC2ad/PromethION_LC2ad_30x.sorted.bam

curl --range 2048000001-4096000000 -o test.part3 https://kero.hgc.jp/cgi-bin/download/long_read/adenocarcinoma_cell_lines/genome/promethion/LC2ad/PromethION_LC2ad_30x.sorted.bam

... ...

1G = 1024 x 1024 x 1024 字节。 上面由于不想计算,so直接用0代替了,因此下载文件时单个文件不够1G

2. 文件拼接

文件拼接直接通过cat工具即可。他们会自己按照序号顺序进行拼接

 cat test.part? > aaa.bam

3. 验证文件完整性

很多正经的官网,提供系统镜像时会提供MD5,SHA完整性校验值,因此可以对拼接后的文件计算MD5值;如果一样,说明文件下载没有问题;如果不一样,说明文件下载有问题。

当然,如果没有提供相应的校验,那就不用验证了,直接看看下载的文件能否使用就知道了。因为如果文件有损坏,正常情况下是无法打开的。

4. 问题定位

我当时使用几个24M的小文件进行测试(分了3个文件下载),拼接后发现MD5不一样,于是乎我使用BeyondCompare工具把文件的二进制进行了比较:
比较后发现多了两个字节,后来发现是我range范围写重复导致的。重新修改了范围后,重新下载拼接发现是可行的。

后续

感觉可以去写一个下载工具了,支持并发下载大文件,哈哈哈

本文标签: 程序员下载方法文件