请求AppDataFolder时,Google云端硬盘API会返回错误"无效值"和"无效查询"

Max*_*xim 9 google-api google-drive-api

我试图请求位于AppDataFolder中的所有文件的列表.

当我提出以下要求时:

GET https://www.googleapis.com/drive/v2/files?spaces=appDataFolder&maxResults=1000 HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer <MyToken>
User-Agent: <MyUserAgent>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

HTTP/1.1 400 Bad Request
{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalid",
    "message": "Invalid query",
    "locationType": "parameter",
    "location": "q"
   }
  ],
  "code": 400,
  "message": "Invalid query"
 }
}
Run Code Online (Sandbox Code Playgroud)

如果我只想获取所有文件的列表,为什么要问我查询?"q"参数是强制性的吗?我认为这是我的代码中的一些错误,所以我下载了最新的Google Drive SDK for Python并得到了同样的错误.

我尝试添加"q"参数,q=title != 'foo'但它也返回了无效的查询错误.奇怪的是,如果我添加以下查询,我可以获取我的文件列表:q=title='<myfolder>' or title='<file1 in my folder>' or title='<file2 in my folder>'...,但如果我删除title='<myfolder>'我再次获取查询错误.

我还尝试了另一个请求,但它返回了一个空列表,虽然我知道AppDataFolder中有文件:

GET https://www.googleapis.com/drive/v2/files?q='appfolder'+in+parents&access_token=<MyToken>
Run Code Online (Sandbox Code Playgroud)

更新:看起来此问题特定于某个帐户.我用另一个帐户测试了所有这些请求,并将所有文件隐藏在appdatafolder中.有效的请求:

https://www.googleapis.com/drive/v2/files?spaces=appDataFolder
https://www.googleapis.com/drive/v2/files?q='appDataFolder'+in+parents
https://www.googleapis.com/drive/v2/files?q='appfolder'+in+parents
Run Code Online (Sandbox Code Playgroud)

第一个帐户有什么问题?

更新2:我无法再从其他帐户检索appdata文件列表.看起来像API发生了什么.

DaI*_*mTo 5

“应用程序数据文件夹”是一个特殊文件夹,只能由您的应用程序访问。其内容对用户其他应用程序是隐藏的。尽管对用户隐藏,但应用程序数据文件夹存储在用户的云端硬盘上,因此使用用户的云端硬盘存储配额。应用程序数据文件夹可用于存储配置文件、保存的游戏数据或用户不应直接交互的任何其他类型的文件。

\n\n

即使用户看不到应用程序数据文件夹的内容,他们也可以在“管理应用程序”对话框中看到应用程序\xe2\x80\x99s应用程序数据文件夹使用的存储量

\n\n

要求

\n\n
GET https://www.googleapis.com/drive/v3/files?q=\'appDataFolder\'+in+parents&key={YOUR_API_KEY}\n
Run Code Online (Sandbox Code Playgroud)\n\n

回复:

\n\n
{\n "kind": "drive#fileList",\n "incompleteSearch": false,\n "files": [\n ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用Google Apis Explorer进行测试返回 0 个文件,因为 Google APIs Explorer 客户端尚未将任何文件上传到我的 Google 云端硬盘帐户。

\n\n

答:Appdata 文件夹中的文件归创建它们的应用程序所有。如果您在用户应用程序数据文件夹中看不到任何文件,那么我建议您使用了错误的客户端,并且无法看到您的应用程序可能已上传的任何文件。

\n\n

正确使用q

\n\n

如文档中所述,使用 q 搜索应用程序数据文件夹的正确用法是。

\n\n
\'appDataFolder\' in parents\n
Run Code Online (Sandbox Code Playgroud)\n\n

应用程序数据文档。

\n\n

更新 :

\n\n
\n

q=title=\'\' 或 title=\'\' 或 title=\'\'...,但是如果我删除 title=\'\'

\n
\n\n

如果这些工作正常,并且文件的父级未声明 appdata,那么我建议您将文件上传到用户主 Google 驱动器帐户中,而不是将它们上传到 appdata。这是一个坏主意,因为这样用户将能够看到他们可能无法编辑的文件,这会给他们带来很多困惑。如果您将其放在文件夹中并且未授予他们对该文件的权限,则用户实际上可能无法看到该文件(不确定该文件是否在此文件夹中)。

\n\n

更新2:

\n\n
\n

父级中的 q=\'appDataFolder\'

\n
\n\n

将返回您的应用程序创建的所有文件,其父文件夹为 appDataFolder。

\n\n
\n

q=\'appfolder\' 在父母中

\n
\n\n

将返回具有 appfolder 父文件夹的所有文件,该文件夹实际上是用户 Google Drive 帐户上的目录,而不是隐藏的 appDataFolder

\n\n
\n

空格=\'驱动器\'

\n
\n\n

这意味着数据存储在驱动器上。

\n\n
\n

空格=appDataFolder

\n
\n\n

这是请求应用程序数据,但我认为这仅在 V3 中受支持

\n