Google Drive .Net API。没有可用文件的元数据

时间:2016-12-24 18:53:23

标签: c# .net google-api google-drive-api

我正在尝试从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。有人可以解释会发生什么吗?

1 个答案:

答案 0 :(得分:1)

首先,您可能需要查看您的授权查看对象的访问权限。

其次,请尝试按照相关OAuth 2.0 Playground中的建议检查SO post,以测试您的代码或API中是否存在错误。在文章中还指出,像文件夹这样的文件,只是链接的Google文档将为空。

对于您的Google云端硬盘功能的树命令,它将取决于您的方法。我找到了一个使用Apps Script的教程,该教程将显示获取Drive文件的分层树形图的基本步骤。

希望这有帮助。