Google Drive API v3 (C# .NET) 按标题搜索 folders/files 抛出 RequestError Invalid Value [400]
Google Drive API v3 (C# .NET) searching folders/files by title throws RequestError Invalid Value [400]
我正在尝试将文件上传到 Google 驱动器的特定文件夹。因为我需要文件夹的 ID(而不仅仅是名称)来设置上传目标(文件的 parent),所以我尝试按名称搜索它并从下面的查询中获取第一个返回的文件的 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'
returns 一个空列表(虽然不会抛出错误) ).
我的代码的相关片段:
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 };
有趣的是,这个确切的查询适用于 Google 的 API 测试站点 API v2,但不适用于 API v3。获取所有文件夹的查询在两者上都有效(Google 测试站点上的 v2 和 v3),但我通过我的 .NET 应用程序得到一个空响应。
PS:文件上传到 "My Drive" 目录有效,设置文件权限等驱动服务操作有效。
接受有关检查内容/我搞砸的地方的想法和建议。
您遇到的问题是您使用的是 Google Drive v3 API 它 File.Name
而不是 File.Title
。 Title
用于 v2.
request.Q = "mimeType = 'application/vnd.google-apps.folder' and name = 'test_folder'";
这是一个已知的错误,我已经在一年多前向 Google 报告了文档中的错误,仍在等待他们解决这个问题。
更改行:
request.Q = "title='test_folder'";
至
request.Q = "name='test_folder'";
注意:已删除的文件夹和文件仍然有其 ID(永久删除除外 - 在回收站中)。所以在某些情况下,这一行是否会出错 return true 结果:
string folderId = request.Execute().Files[0].Id;
希望对您有所帮助。
我正在尝试将文件上传到 Google 驱动器的特定文件夹。因为我需要文件夹的 ID(而不仅仅是名称)来设置上传目标(文件的 parent),所以我尝试按名称搜索它并从下面的查询中获取第一个返回的文件的 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'
returns 一个空列表(虽然不会抛出错误) ).
我的代码的相关片段:
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 };
有趣的是,这个确切的查询适用于 Google 的 API 测试站点 API v2,但不适用于 API v3。获取所有文件夹的查询在两者上都有效(Google 测试站点上的 v2 和 v3),但我通过我的 .NET 应用程序得到一个空响应。
PS:文件上传到 "My Drive" 目录有效,设置文件权限等驱动服务操作有效。
接受有关检查内容/我搞砸的地方的想法和建议。
您遇到的问题是您使用的是 Google Drive v3 API 它 File.Name
而不是 File.Title
。 Title
用于 v2.
request.Q = "mimeType = 'application/vnd.google-apps.folder' and name = 'test_folder'";
这是一个已知的错误,我已经在一年多前向 Google 报告了文档中的错误,仍在等待他们解决这个问题。
更改行:
request.Q = "title='test_folder'";
至
request.Q = "name='test_folder'";
注意:已删除的文件夹和文件仍然有其 ID(永久删除除外 - 在回收站中)。所以在某些情况下,这一行是否会出错 return true 结果:
string folderId = request.Execute().Files[0].Id;
希望对您有所帮助。