【问题标题】:Google Drive API returns errors "Invalid value" and "Invalid query" when requesting AppDataFolderGoogle Drive API 在请求 AppDataFolder 时返回错误“无效值”和“无效查询”
【发布时间】:2023-03-28 11:46:01
【问题描述】:

我试图请求位于 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>

我收到以下错误:

HTTP/1.1 400 Bad Request
{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalid",
    "message": "Invalid query",
    "locationType": "parameter",
    "location": "q"
   }
  ],
  "code": 400,
  "message": "Invalid query"
 }
}

如果我只想获取所有文件的列表,为什么它要求我进行查询? “q”参数是强制性的吗?我认为这是我的代码中的一些错误,所以我下载了最新的适用于 Python 的 Google Drive SDK 并得到了同样的错误。

我尝试添加像q=title != 'foo' 这样的“q”参数,但它也返回了无效查询错误。奇怪的是,如果我添加以下查询,我可以获得我的文件列表:q=title='&lt;myfolder&gt;' or title='&lt;file1 in my folder&gt;' or title='&lt;file2 in my folder&gt;'...,但如果我删除title='&lt;myfolder&gt;',我会再次收到查询错误。

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

GET https://www.googleapis.com/drive/v2/files?q='appfolder'+in+parents&access_token=<MyToken>

更新:看起来这个问题是特定于某个帐户的。我用另一个帐户测试了所有这些请求,并将所有文件隐藏在 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

第一个帐户可能有什么问题?

更新 2:我无法再从其他帐户检索 appdata 文件列表。 API 似乎发生了一些变化。

【问题讨论】:

    标签: google-api google-drive-api


    【解决方案1】:

    “应用程序数据文件夹”是一个特殊文件夹,只有您的应用程序可以访问。它的内容对用户隐藏,对其他应用。尽管对用户隐藏,应用程序数据文件夹存储在用户的驱动器上,因此使用用户的驱动器存储配额。 Application Data 文件夹可用于存储配置文件、保存的游戏数据或用户不应直接与之交互的任何其他类型的文件。

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

    请求:

    GET https://www.googleapis.com/drive/v3/files?q='appDataFolder'+in+parents&key={YOUR_API_KEY}
    

    回复:

    {
     "kind": "drive#fileList",
     "incompleteSearch": false,
     "files": [
     ]
    }
    

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

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

    q的正确用法

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

    'appDataFolder' in parents
    

    AppData 文档。

    更新:

    q=title='' or title='' or title=''...,但如果我删除 title=''

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

    更新 2:

    q='appDataFolder' 在父母中

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

    q='appfolder' 在父母中

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

    spaces='驱动器'

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

    spaces=appDataFolder

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

    【讨论】:

    • 这个请求也返回一个空列表。请看我更新的帖子。我设法通过一个非常具体的查询来获取我的文件:q=title='' or title='' or title=''...
    • 那么您不是将它们上传到应用程序数据文件夹,而是用户实际的 Google 驱动器帐户。这是一个坏主意,因为他们将能够查看和更改您的应用程序使用的那些文件
    • 文件上传到appdata文件夹。用户和其他应用程序无法访问这些文件。顺便问一下,父母中的q='appDataFolder'、父母中的q='appfolder'和spaces=appDataFolder有什么区别?
    • 'appfolder' 绝对不是用户 Google Drive 分区的目录。看起来 appDataFolder 只是 appfolder 的新别名。
    • 可能是 V3 发生了很大变化,并且没有很好的记录。空间说什么? developers.google.com/drive/v3/web/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多