Google Drive REST API获取文件仅返回范围为“ drive.file”的404

时间:2018-07-23 23:07:30

标签: google-drive-api

我正在使用Google驱动器REST API V3来访问文件。基本的api网址是: https://www.googleapis.com/drive/v3/files/fileid

并且标头包含密钥:具有从oauth获得的Bearer访问令牌的授权。

但是,如果您创建普通的Google文档,则可以使用。响应是:

{
"id": "1v3V0BWcWtYu_K9OLm1rffHA3vj5Bz8SY-0-JpU7CiEc",
"name": "test",
"mimeType": "application/vnd.google-apps.document",
"parents": [
    "0AP75Wn-e9WDqUk9PVA"
]
}

但是,如果我是通过 google模板创建的google文档,则返回404。请参见下文:

{
"error": {
    "errors": [
        {
            "domain": "global",
            "reason": "notFound",
            "message": "File not found: 14gHUCFTrwHaoZ88Kr0Qnn8OsUdzcU037GK7v-JI9L1I.",
            "locationType": "parameter",
            "location": "fileId"
        }
    ],
    "code": 404,
    "message": "File not found: 14gHUCFTrwHaoZ88Kr0Qnn8OsUdzcU037GK7v-JI9L1I."
}
}

6 个答案:

答案 0 :(得分:0)

事实并非如此。我使用简历模板创建了一个google doc。我获得了fileID并针对files.get运行它。我收到200条回复:

{
 "kind": "drive#file",
 "id": "1y1h2vHYwrb57O-ein7VhqMwwJKtr4pP4N4bBow7-vus",
 "name": "resumeTemplate",
 "mimeType": "application/vnd.google-apps.document"
}

顺便说一句,files.get的URI请求是

https://www.googleapis.com/drive/v3/files/fileId

不是

https://www.googleapis.com/drive/v3/files/

答案 1 :(得分:0)

我做了一点测试,发现“ drive.file”范围实际上在获取文件元数据/内容方面存在一些问题。从文档中,“ drive.file”允许该应用访问此应用创建的文件,或者用户从驱动器或Google文档中使用该应用显式打开文件。当我对此进行测试时,实际上这并没有按预期进行。我上传了一些文件,我的应用可以访问其中一个文件,而其他文件则不能。我记得当我发布应用程序时,谷歌驱动器团队审查了我的应用程序,并拒绝了几次有关该范围的检查,最后该应用程序仅通过了“ drive.file”范围的审查。

有人遇到过同样的问题吗?

答案 2 :(得分:0)

我请求更多权限后,问题解决了。没有改变。

答案 3 :(得分:0)

此处仅作后代之用:将drive.file权限与文件选择器一起使用时,只有当选择器位于与Google Developer Console驱动器SDK中配置的域相同的域上时,您收到的url /令牌才会起作用配置页面(https://console.developers.google.com/apis/api/drive.googleapis.com/drive_sdk)。

如果您将其托管在任何其他域上,则尝试使用URL直接下载文件将得到404:您需要使用drive.readonly或驱动器权限。

答案 4 :(得分:0)

就我而言,这与设置Drive.files().get(googleId).setSupportsAllDrives(true)来访问共享驱动器上的文件有关。

答案 5 :(得分:0)

此处为 2021 年的答案,就我而言,问题(某些文件为 404)存在是因为我使用的 Google 项目编号错误

更难的是,有些帐户确实工作得很好,而有些则没有只使用这个范围:

https://www.googleapis.com/auth/drive.file

如选择器的谷歌文档所示:

// Replace with your own project number from console.developers.google.com.
// See "Project number" under "IAM & Admin" > "Settings"
const appId = "1234567890";

在项目编号确定后,一切都开始完美运行(不需要 https://www.googleapis.com/auth/drive 范围,因为它是一个免费范围,可以为所有内容提供权限)。

干杯。