我正在使用Google Drive API访问团队驱动器上的文件。我的服务器应用程序使用OAuth2获得访问令牌。然后,我将此令牌用作承载令牌来进行API驱动器调用。当我尝试从团队驱动器下载图像时,调用https://www.googleapis.com/drive/v3/files端点时列出的文件之一是:
{
"id": "<longAlphaNumericID>",
"mimeType": "image/jpeg",
"webContentLink": "https://drive.google.com/a/<myTeamDriveDomain>/uc?id=SOME_GOOGLE_DRIVE_ID&export=download",
"fileExtension": "jpg",
"size": "108794"
}
当我尝试在请求标头中下载具有相同Bearer令牌的webContentLink时,我被重定向到https://doc-0k-08-docs.googleusercontent.com/docs/securesc/ ...
该Bearer令牌似乎不适用于该googleusercontent.com域,并且我的服务器最终被转发到登录页面(这对服务器应用不利)。
当尝试发出第二个请求时,我注意到响应头包含:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: false
Access-Control-Allow-Methods: GET,OPTIONS
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/answer/151657?hl=en for more info."
我认为最后一个标头指出了问题所在,它与重定向到另一个域有关,但是我不确定该如何处理。我认为通过OAuth2授予的访问令牌在适当范围内应该可以执行所有操作。它似乎确实可以用于其他所有功能(访问电子表格,文档等),但是我很难以这种方式下载图像。
以下是请求和响应的详细列表:
https://www.googleapis.com/drive/v3/files?corpora=teamDrive&includeTeamDriveItems=true&supportsTeamDrives=true&teamDriveId=[myTeamDriveID]
,标头中带有授权令牌。https://drive.google.com/a/[myTeamDriveDomain]/uc?id=[fileID]&export=download
CP="This is not a P3P policy!
重定向到http://docs.google.com/a/[myTeamDriveDomain]/nonceSigner?nonce=[alphaNumericID]&continue=https://doc-0g-08-docs.googleusercontent.com/docs/securesc/[longAlphaNumericID]/[longAlphaNumericID]/[longNumericID]/[longNumericID]/[longNumericID]/[longAlphaNumericID]?e%3Ddownload%26h%3D[longNumericID]&hash=[hashValue]
https://www.google.com/a/]myTeamDriveDomain]/ServiceLogin?passive=1209600&osid=1&continue=[previousRedirectURL]&followup=[previousRedirectURL]
有什么想法我在做什么错吗?
答案 0 :(得分:1)
如果打算将文件内容下载到您的应用程序,则不要使用webContentLink。取而代之的是,您只需使用get
alt=media
来标识文件ID(对于二进制文件)或导出为特定格式(对于Google文档)。参见https://developers.google.com/drive/api/v3/manage-downloads