我正在尝试从Google云端硬盘获取文件夹和文件,还有一些我无法理解的非显而易见的内容。
首先,我得到了37个项目 - 这是错误的,因为我的驱动器上从未有过37个文件,所以这些文件来自哪里?
其次,我没有收到像“大小”或“扩展”或“父母”这样的文件元数据 - 所有这些属性对于返回的所有项目中的至少一半都是“空” - 有人可以解释什么是“父母”是“空”?
最后一件事,我可以逐步获取文件和文件夹,例如在OneDrive中,例如,从驱动器的根目录获取所有文件和文件夹,然后从选定的文件夹中获取子项(或者下载项目,如果它是文件)?
据我所知,我必须获取所有文件和文件夹,然后构建一个树以向用户显示它,对于我来说这不好,因为多父母的东西等。
这是我用来获取文件和属性的代码:
public UserCredential Authorize()
{
UserCredential credential = null;
using (var stream =
new FileStream("path_to_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, "path_to_save_creds.json");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}
return credential;
}
public List<File> RetrieveAllFiles(DriveService service)
{
List<File> result = new List<File>();
FilesResource.ListRequest request = service.Files.List();
request.Fields =
"nextPageToken, files(name, id, size, kind, parents, sharedWithMeTime, shared, sharingUser, fileExtension, viewedByMe, viewedByMeTime, trashed)";
request.Spaces = "drive";
do
{
try
{
FileList files = request.Execute();
result.AddRange(files.Files);
request.PageToken = files.NextPageToken;
}
catch (Exception e)
{
/*handle exception here*/
}
} while (!String.IsNullOrEmpty(request.PageToken));
return result;
}
以下是我如何调用上述方法:
UserCredential credential = Authorize();
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
var googleFiles = RetrieveAllFiles(service);
此时,我有37个项目,“fileExtension”,“seenByMe”,“parents”等属性为null。有人可以解释会发生什么吗?
答案 0 :(得分:1)
首先,您可能需要查看您的授权查看对象的访问权限。
其次,请尝试按照相关OAuth 2.0 Playground中的建议检查SO post,以测试您的代码或API中是否存在错误。在文章中还指出,像文件夹这样的文件,只是链接的Google文档将为空。
对于您的Google云端硬盘功能的树命令,它将取决于您的方法。我找到了一个使用Apps Script的教程,该教程将显示获取Drive文件的分层树形图的基本步骤。
希望这有帮助。