Google Drive API允许我们在没有身份验证的情况下下载公共文件吗?

时间:2017-10-31 18:07:09

标签: java api file authentication google-drive-api

我想知道我可以使用API​​从Google云端硬盘下载公共文件而无需身份验证吗?可能我可以,因为如果我没有认证就可以下载任何文件。但Google Drive API Docs会说以下内容;

Every request your application sends to the Drive API must include an authorization token.

例如,我可以显示以下公共文件,我正在尝试获取它。也许,我甚至不需要使用Google Drive API。顺便说一下,我正在使用JAVA。

https://drive.google.com/file/d/0B1dXCaVmaqzROHNwdC1SQmdxejQ/view?usp=sharing

我能做什么,有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您不需要身份验证即可读取公共文件。下载文件的网址非常简单:https://www.googleapis.com/drive/v3/files/<FILE_ID>?key=<YOUR_API_KEY>&alt=media

答案 1 :(得分:0)

这是公开文件的预期行为,任何拥有该链接的人都可以访问该文件。另一方面,如果您尝试访问私人文件,则会出现如下屏幕:

enter image description here

现在,如果您要使用Drive API本身,则需要进行身份验证。您可以在Downloading a file文档中阅读:

  

“要下载文件,请向。做出授权的HTTP GET请求   文件的资源URL并包含查询参数alt = media“

答案 2 :(得分:0)

https://www.googleapis.com/drive/v3/files/<FILE_ID>?key=<YOUR_API_KEY>&alt=media 给了我 CORS 错误,所以这就是我所做的:

  1. 在没有 https://www.googleapis.com/drive/v3/files/<FILE_ID>?key=<YOUR_API_KEY> 的情况下调用了 alt=media

  2. 读取响应中的属性 downloadUrlmimeType

  3. 使用downloadUrl

    调用responseType: arrayBuffer
  4. 使用blobarrayBuffer转换成可以下载的文件

以下关于 angular 的代码可以完成这项工作:

async downloadZip(): Promise<void> {
  try {
    const meta = await this.http.get(
      'https://www.googleapis.com/drive/v2/files/<FILE_ID>?key=<API_KEY>'
      ).toPromise() as { downloadUrl: string, mimeType: string };
    const arrBuffer = await this.http.get(meta.downloadUrl, { responseType: 'arraybuffer'}).toPromise();
    this.saveArrBuffer('testfile', meta.mimeType, arrBuffer);

  } catch (e) {
    console.log(e);
  }
}

saveArrBuffer(fileName: string, type: string, arr: ArrayBuffer): void {
  const blob = new Blob([arr], { type });
  const link = document.createElement('a');
  link.href = window.URL.createObjectURL(blob);
  link.download = fileName;
  link.click();
}

我为此苦苦挣扎,所以很高兴发帖。