java - 使用 Google Drive API 从 Google Drive 直接下载

标签 java google-drive-api

我用 java 编写的桌面应用程序尝试从 Google Drive 下载公共(public)文件。正如我发现的,它可以通过使用文件的 webContentLink 来实现(它可以在没有用户授权的情况下下载公共(public)文件)。

所以,下面的代码适用于小文件:

String webContentLink = aFile.getWebContentLink();
InputStream in = new URL(webContentLink).openStream();

但它不适用于大文件,因为在这种情况下,在没有用户确认的情况下无法通过 webContentLink 直接下载文件,并带有谷歌病毒扫描警告。查看示例:web content link .

所以我的问题是如何在未经用户授权的情况下从 Google Drive 获取公共(public)文件的内容?

最佳答案

2015 年 12 月 8 日更新 根据Google Support使用

googledrive.com/host/ID

方法将于 2016 年 8 月 31 日关闭。


我刚遇到这个问题。

诀窍是将您的 Google Drive 文件夹视为虚拟主机。

2015 年 4 月 1 日更新

Google 云端硬盘已更改,有一种直接链接到您的云端硬盘的简单方法。我在下面留下了我以前的答案以供引用,但这里有一个更新的答案。

  1. 在 Google 云端硬盘中创建一个公共(public)文件夹。

  2. 公开分享此驱动器。

    enter image description here

  3. 当您在文件夹中时,从地址栏中获取您的文件夹 UUID

    enter image description here
  4. 将该 UUID 放入此 URL

    https://googledrive.com/host/<folder UUID>/
  5. 将文件名添加到文件所在的位置。

    https://googledrive.com/host/<folder UUID>/<file name>

<删除> Which is intended functionality by Google
new Google Drive Link .

您所要做的就是简单地获取公共(public)共享驱动器文件夹的 主机 URL。为此,您可以上传纯 HTML 文件并在 Google 云端硬盘中预览以找到您的主机 URL。

步骤如下:

  1. 在 Google 云端硬盘中创建一个文件夹。

  2. 公开分享此驱动器。

    enter image description here

  3. 上传一个简单的 HTML 文件。添加任何其他文件(子文件夹ok)

    enter image description here

  4. 在 Google 云端硬盘中打开并“预览”HTML 文件

    enter image description here

  5. 获取此文件夹的 URL 地址

    enter image description here

  6. 从您的 URL 文件夹库创建一个直接链接 URL

    enter image description here

  7. 此网址应允许直接下载您的大文件。

[编辑]

我忘记添加了。如果您使用子文件夹来组织您的文件,您只需像在 URL 层次结构中所期望的那样使用文件夹名称。

https://googledrive.com/host/<your public folders id string>/images/my-image.png


我想做的事

我使用 Virtual Box for Vagrant 创建了一个自定义 Debian 镜像。我想与同事分享这个“.box”文件,以便他们可以将直接链接放入他们的 Vagrantfile。

最后,我需要一个指向实际文件的直接链接。

Google 云端硬盘问题

如果您将文件权限设置为公开可用并使用 gdocs2direct 之类的内容创建/生成直接访问链接工具或只是自己制作链接:

https://docs.google.com/uc?export=download&id=<your file id>

您将获得一个基于 cookie 的验证码并提示“Google 无法扫描此文件”提示,这不适用于 wget 或 Vagrantfile 配置等内容。

它生成的代码是一个简单的代码,附加了 GET 查询变量 ...&confirm=###到字符串,但它是每个用户特定的,所以你不能为其他人复制/粘贴该查询变量。

但是如果你使用上面的“网页托管”方法,你可以绕过那个提示。

希望对你有帮助!

关于java - 使用 Google Drive API 从 Google Drive 直接下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665881/

相关文章:

java - 我的输出只是给出奇怪的字符

python - 如何在 Google Drive API 中执行不区分大小写的标题搜索?

python-3.x - 错误 : redirect_uri_mismatch pydrive

python - 如何列出 Google 云端硬盘文件夹的所有文件、文件夹、子文件夹和子文件

java - JdbcTemplate如何自动生成主键

java - java中使用hashmap的有向图

java - Spring 安全: Handling BOTH web app security and web service security

JavaFX:服务和 GUI

java - Drive api 下载文件时出错

scripting - 谷歌云端硬盘 : Move file to folder