我想知道我可以使用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
我能做什么,有什么建议吗?
答案 0 :(得分:1)
您不需要身份验证即可读取公共文件。下载文件的网址非常简单:https://www.googleapis.com/drive/v3/files/<FILE_ID>?key=<YOUR_API_KEY>&alt=media
。
答案 1 :(得分:0)
这是公开文件的预期行为,任何拥有该链接的人都可以访问该文件。另一方面,如果您尝试访问私人文件,则会出现如下屏幕:
现在,如果您要使用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 错误,所以这就是我所做的:
在没有 https://www.googleapis.com/drive/v3/files/<FILE_ID>?key=<YOUR_API_KEY>
的情况下调用了 alt=media
读取响应中的属性 downloadUrl
和 mimeType
使用downloadUrl
responseType: arrayBuffer
使用blob
将arrayBuffer
转换成可以下载的文件
以下关于 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();
}
我为此苦苦挣扎,所以很高兴发帖。