Google Drive API v3(C#.NET)按标题搜索文件夹/文件会抛出RequestError无效值[400]

时间:2017-11-06 11:59:59

标签: c# google-api google-drive-api google-api-dotnet-client file-search

我正在尝试将文件上传到Google云端硬盘到特定文件夹。由于我需要文件夹的ID(而不仅仅是名称)来设置上传目的地(文件的父级),我尝试按名称搜索它,并从下面的查询中获取第一个返回的文件ID 。而不是结果我得到一个错误:

Google.Apis.Requests.RequestError Invalid Value [400]
Errors [ Message[Invalid Value] Location[q - parameter] Reason[invalid] Domain[global]
at Google.Apis.Requests.ClientServiceRequest`1.Execute()
...

如果我尝试搜索任何内容,我会得到此错误或空响应(即查询所有目录mimeType='application/vnd.google-apps.folder'会返回一个空列表(但不会抛出错误))。

我的代码的相关片段:

FilesResource.ListRequest request = service.Files.List();
request.Q = "title='test_folder'";
string folderId = request.Execute().Files[0].Id;    // Error occurs here upon execution
...
fileMeta.Parents = new List<string> { folderId };

有趣的是,这个确切的查询适用于API v2上的Google API测试网站,但不适用于API v3。获取所有文件夹的查询虽然适用于(Google的测试网站上的v2和v3),但我通过.NET应用程序获得了空响应。

PS:文件上传到&#34;我的云端硬盘&#34;目录工作,驱动服务操作,如设置文件权限工作等。

对于我应该检查什么/搞砸的地方持开放的想法和建议。

2 个答案:

答案 0 :(得分:4)

您遇到的问题是您使用的是Google Drive v3 API File.Name而不是File.Title。 v2中使用了Title

request.Q = "mimeType = 'application/vnd.google-apps.folder' and name = 'test_folder'";

这是一个已知的错误,我已经在一年多前向Google报告了文档中的错误,仍然在等待他们解决问题。

答案 1 :(得分:0)

更改行:

request.Q = "title='test_folder'";

收件人

request.Q = "name='test_folder'";

注意:删除的文件夹和文件仍然具有其ID(永久删除除外-回收站中)。因此在某些情况下,该行将是错误的,或者不会返回真实结果:

string folderId = request.Execute().Files[0].Id; 

希望获得帮助。