本文将对「如何下载Google Drive中的超大型文件?」这一问题展开探索和解决。

太长不看:直接看这里

情景与问题

在AI、系统安全等研究领域,一项研究成果的产生需要大量的数据样本进行训练和分析,而很多国外作者会倾向于在Google Drive上分享自己的数据集。但是,Google Drive只会为每个下载链接保留一小时的有效期,即你会在Google Drive上的下载链接中会发现一个token字段,而这个字段的有效期是1小时。这一机制使得你必须在1小时内下载好你的文件,否则时机一到,token刷新,当前下载会话就会失效。如果无法有效实现断点续传的话,你就得从头下载了。

那么,在国内的网络环境下,是否有方案可以帮助我们有效实现从Google Drive上下载几十GB乃至更大的文件呢?

候选解决方案

解决上述问题的核心点在于:要么具有下载带宽足够的网络服务,要么可以实现对Google Drive的有效断点续传。因此,可以有以下候选的解决方案:

  • 浏览器直接下载
  • Google Drive Desktop 客户端下载
  • 第三方下载软件(如IDM、CyberDuck等)
  • 用国外服务器下载后作为中转,设法下载到国内本地

以上候选解决方案我都试了一遍,在面对70GB大文件时,只有最后一个方法是奏效的。而在介绍这种方法之前,首先介绍前三种方法在目前Google Drive下载机制及国内网络环境下失败的原因。

浏览器直接下载

直接用Chrome下载(开启硬件加速、多线程),如下图所示。

此时,下载速度将主要取决于你的代理服务器带宽、Chrome下载策略等i因素,而我这个速度对于下载70GB的大文件而言是远远不够的。

因此,一个小时后,下载失败了。

Google Drive Desktop 客户端

在我寻找其他解决方法时,发现有人提到使用  Back up & Sync 这款软件可以实现Google Drive下载的断点续传。而在2021年这款软件已经正式成为了Google Drive Desktop。下载并安装完后,这款Google Drive的客户端似乎是一个半成品,在本地你甚至无法直接浏览云端存储的内容,如下图所示。

整个软件只有一个空荡荡的下载状态(所谓的同步状态),你想下载Drive中的某个文件时,只能使用搜索功能查找你想要的文件。这甚至都不如国内的一些云盘客户端的体验。总之,在搜索到我想“同步”到本地的大文件后,点击文件名自动开始下载。

令人惊喜的是,客户端的下载速度平均可以达到8MB/s(虽然有些不稳定)。然而,一个小时后,下载再一次的失效了,此时我本以为重新点击文件就能实现断点续传,可惜客户端还是从头给我下载。翻阅了产品文档和他人经验后,我依然没能找到断点续传的功能,不知这是我自己的原因,还是这个软件从Back up & Sync 改进而来后,居然不支持自家Drive的断点续传了?

总之,Google Drive Desktop给我一种软件工业半成品的感觉,用户体验真的非常糟糕。

第三方下载软件

在很多多线程下载器、SFTP下载器等第三方下载软件中,我尝试了著名的IDM。当IDM接管Google Drive的下载链接时,也只能达到2-4MB/s的下载速度,如下图所示;不过没关系,选用IDM的原因之一就是据说它可以实现Google Drive的断点续传。

当下载一个小时后,IDM虽然同样会告诉用户当前下载链接已失效,但是当你尝试让IDM进行链接重定向时,它会要求你再在Drive中手动下载一下,如下图所示。这样一来,它就又可以接管新的下载链接了。而且惊喜的是,IDM的确可以实现对新下载链接的断点续传

但是在我测试IDM之时, 我已多次尝试下载该文件了。Google Drive以 此文件已超出下载限制的原因 拒绝让我重新下载。因此,尽管IDM在断点续传时能重定向链接并以一个不错的速度接管,但此时的我们不得不寻找一个新的方法。

有效的解决方案

最终,我们只能寄希望于寻找具有足够带宽的国外主机,使用其下载大文件后,设法转移到国内本地。这种做法虽然有些繁琐,但只要文件能成功下载到我们能控制的主机中,想再对其进行各种操作就不会有限制了。

申请Vultr主机

Vultr主机的一大优势在于它的主机带宽据说非常不错,同时它支持支付宝缴费,而且扣费方式是按照小时收费的。因此,从你创建一个主机的docker实例,到结束任务销毁这个实例的过程中,通常只花费不到1$的价格就足够了,这便于我们在上面进行一些临时性的任务和实验。

进入Vultr官网,登录后在Deploy中依次选择购买的主机地点、系统、存储空间等配置。此处要记得根据目标文件的大小选择一个空间充足的方案,这里我选择了160GB存储的配置,如下图所示。

在充值(无需充太多,$10即可)并启动之后,我们需要在当前这个主机实例中通过命令行的方式下载Google Drive中的文件。

获取Oauth API Key

Google作为一个API狂魔,自然也提供了Google Drive文件下载的Oauth API。可通过如下步骤实现Drive API的申请,并在命令行中进行文件的下载。

在Oauth 2.0中,选择Drive API v3下的 https://www.googleapis.com/auth/drive.readonly,如下图所示。

选择 Authorize API,并选择 Exchange authorization code for tokens 就可以申请到一个新的Drive API 下载用 Access Token,这一token的有效期同样为1小时。

记得将该 Access Token 复制保存出来,以便下一步使用。

下载至Vultr主机

下面我们使用curl在命令行中下载Drive中的文件。

curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://www.googleapis.com/drive/v3/files/YOUR_FILE?alt=media -o OUTPUT_FILE

其中有三个需要自己填写字段:

  • YOUR_ACCESS_TOKEN: 填写我们刚申请的token即可
  • YOUR_FILE: 在Drive右击要下载的文件, 选择 获取链接, 将链接的后半部分填入即可, 如下图所示.

  • OUTPUT_FILE: 下载要输出的文件名, 随意填写即可; 如果是断点下载, 记得保持文件名一致.

运行命令开始下载。可以看到,海外Vultr主机的直连Drive的带宽非常可观,平均速度居然可以达到100MB/s左右。这一速度下载70GB的文件也只需要十几分钟。

因此,使用国外主机是完全可以有效下载Google Drive中的大文件的,1小时的极限可以下载400GB左右的文件,而且可以使用curl -C实现断点续传,由此理论上能实现任意大文件的有效下载。

下载至国内主机

此时文件已成功下载至我们能控制的一个主机了,我们可设法将其二次下载至国内的本地服务器。而Vultr的主机带宽已经充分证明了它网络服务的可靠性。因此,可以在Vultr主机上架设nginx,并直接将该大文件使用http服务发布在公网上,通过nginx + http的文件下载服务,在国内本地主机上使用IDM等第三方软件加速下载。

在Vultr上直接`apt install nginx` 来安装nginx,安装记得在Vultr主机上使用如下命令关闭防火墙。启动服务如下所示。

sudo ufw app list
sudo ufw allow 'Nginx Ful'

在设置之后,可以直接将我们的bodmas.zip这一大文件移动到Debian的nginx Web根目录(`/var/www/html`)下。之后,本地直接访问`http://my_vultr_ip/bodmas.zip`,让IDM接管下载,即可看到此时的下载速度基本也能达到70MB/s,而且不会有下载时间限制。

最终,这一70GB的数据集文件,几经转折终于抵达了我们自己的电脑中。而我们Vultr主机也可以直接destroy掉,此时只花了1$不到,余额可以先放着以备他用。

遗留问题

Google Drive Desktop的使用:这个软件的用户体验实在是太差了,但它毕竟是Google Drive的官方客户端,因此上文中我的失败经验有没有可能只是我的打开方式不对,但软件本身其实是支持断点续传的?

CyberDuck的断点续传:CyberDuck也是一款非常出名的第三方下载软件,它可以连接许多产品的文件下载服务。但由于在没有license的条件下,是无法连接至Google Drive的。因此CyberDuck是否能做到比IDM更强大、更高效的断点续传?这一结果可能需要他人来进一步测试了。

总结

以上成功的方案可以基本总结成下面的5步:

  1. 申请一个带宽可靠、存储足够的海外主机(推荐Vultr);
  2. 申请Google Drive的Oauth API Key (获得 Access Token);
  3. 使用curl -C 下载目标文件至海外主机;
  4. 在海外主机上架设nginx,设置防火墙,并将目标文件移动至根目录;
  5. 本地使用IDM等多线程下载工具,在海外主机的Web服务中接管目标文件的下载。

诚然,直接使用IDM接管并断点续传这一方案在特定条件下也是可以成功的,但终究没有直接使用最后一种方法的下载速度快而且省心。在经过简单的配置之后,我们基本可以下载Google Drive中任意的超大型文件了。

最后,感谢你的阅读,欢迎给出建议或者其他更高效的方法。以一句歌词作为结束:

“即使只相隔着块纸,相亲必须同时同意” ——容祖儿《墙纸》

如何下载Google Drive中的超大型文件相关推荐

  1. 高效下载Google Drive中的大量文件

    方法流程 最终是通过OneDrive进行下载.流程如下: Google Drive 文件中转至 MultCloud再转至OneDrive,通过Microsoft One Drive同步至电脑即可. G ...

  2. 用户id可以出现在url中吗_下载Google Drive中的文件

    通过Python下载Google Drive中的文件的代码如下: download_googledrive.py import

  3. [转]使用wget命令下载Google drive上的文件

    转载说明: 原文地址https://blog.csdn.net/Mao_Jonah/article/details/88372086 感谢原作者分享.如有侵权,请联系我删除.谢谢! 此处的文件是指公开 ...

  4. linux bash shell wget 下载google drive(谷歌云端硬盘)中大文件

    linux bash shell wget 下载google drive(谷歌云端硬盘)中大文件 wget --load-cookies /tmp/cookies.txt "https:// ...

  5. 使用直链直接下载 Google Drive 里的文件的方法

    使用直链直接下载 Google Drive 里的文件的方法 Google Drive 里并不提供创建直接下载链接的选项,但是可以通过小小的更改链接形式就能把分享的内容保存到本地.例如,一份通过 Goo ...

  6. 【小教程】Ubuntu gdown下载Google Drive文件

    由于服务器都是使用命令行的,所以可以使用gdown来下载Google Drive文件. 安装gdown: git clone https://github.com/wkentaro/gdown.git ...

  7. 解决命令行下载Google Drive大文件出现的问题

    解决命令行下载Google Drive大文件出现的问题 文件格式 Gdown下载 解决方法 文件格式 一般google drive分享的文件链接如下: https://drive.google.com ...

  8. 通过 Colab 下载 Google Driver 上的大文件到内网服务器

    这里写自定义目录标题 1. 将 Google Driver 上的大文件下载到 Colab 1.1 获取文件唯一的 fileID 1.2 查看文件的 MD5 值 1.3 获取 API 的 Access ...

  9. 2019 Google Drive Api 上传文件到谷歌云盘 获取分享下载链接

    如果图片失效或者格式已乱,建议阅读原文   在[案例]搭建 Quizzes 网站,每天赚取 30-50 美元 提到下载站项目,因为整个项目代码加上一些说明,会导致内容太多,所以准备分成几部分,这样看起 ...

最新文章

  1. Unity3d连接SQL Server数据库出现SocketException: 使用了与请求的协议不兼容的地址错误...
  2. linux netstat 查看网络信息 实例 状态说明
  3. html不间断滚动图片,Javascript实现图片不间断滚动的代码
  4. Apache rewrite
  5. 汇编语言介绍,内存和总线的初步认识
  6. Serverless Devs 的官网是如何通过 Serverless Devs 部署的?
  7. Java黑皮书课后题第5章:*5.30(金融应用:复利值)假设你每月在储蓄账户上多存100美元,年利率为5%,那么每月利率是0.05 / 12 = 0.00417。编写程序提示用户输入数据显示定月钱数
  8. 安装部署Exchange Server 2010 CAS NLB MailBox DAG
  9. mysql中try的意思_java中try是什么意思
  10. (计算机组成原理)第二章数据的表示和运算-第三节3:浮点数加减运算
  11. 解决新版本Vivado打开老工程IP锁住的问题
  12. webpack基础教程:(二)
  13. mybatis自动生成service、dao、mapper
  14. python标准库——sys模块
  15. 蓝桥杯真题:杨辉三角形
  16. Unity之IL2CPP
  17. m4s格式转换mp3_mp3文件怎么转换格式
  18. 藏语计算机基础知识,2017年青海民族大学计算机学院738藏语与现代汉语基础考研题库...
  19. 《JAVA: 学习导图》
  20. 电大考试计算机应用基础考试试题,电大计算机应用基础网络教育统考考试(2013真题卷)...

热门文章

  1. 分享将iOS游戏移植到Android平台的注意要点
  2. 微信公众号 Jssdk调用错误码:63002, 获取access_token错误代码 errcode 40164的解决方法,如何解决,微信公众号的坑。
  3. python入门很简单_Python入门很简单
  4. ubuntu系统下更改python路径
  5. qcy教你下载你在CSDN上写过的文章——第三篇……
  6. 骁龙730g处理器怎么样 骁龙730g相当于麒麟多少 骁龙730g是什么级别
  7. SQL Server 性能调优(内存)
  8. centos上开启6379端口
  9. DOM结构(DOM树)
  10. (HYSBZ - 2038)小Z的袜子(hose)(莫队)