使用Drive api V3从共享文件夹中检索文件,

时间:2017-08-19 13:30:57

标签: google-drive-api

我对其他Google用户的共享文件夹具有读/写权限。

我想使用驱动器V3 API列出该共享文件夹链接中的所有文件(在所有文件夹中)。

最好的方法是什么? 如果共享文件夹中的文件夹数量很大,目前使用的解决方案性能相当慢。

我目前的解决方案:

1 - 查找共享链接中的所有文件夹

2 - 查找父文件夹为

的所有文件
private void getFolderHierarchy(File Res, DriveService driveService, string localPath, string editorName, string projectName)
{
    if (Res.MimeType == "application/vnd.google-apps.folder")
    {
        m_parent += Res.Name + @"\";

        foreach (var res in ResourceFromFolder(driveService, Res.Id).ToList())
            getFolderHierarchy(res, driveService, localPath, editorName, projectName);

        m_parent = m_parent.Remove(m_parent.Length - Res.Name.Length - 1);
    }
    else if (Res.MimeType == "image/jpeg" || Res.MimeType == "image/png")
    {
        {
            if (!m_DownloadedFromEditorFileId.Contains(Res.Id))
            {           
                m_DownloadedGoogleFileId.Add(Res.Name);
                m_parent = m_parent.Remove(m_parent.Length - Res.Name.Length);
            }
        }
    }
}

public List<File> ResourceFromFolder(DriveService service, string folderId)
{
    var request = service.Files.List();
    request.PageSize = 100;
    request.Q = "'" + folderId + "'" + " in parents and trashed=false";
    request.Fields = "files(modifiedTime,id,parents,name,webContentLink,mimeType)";

    List<File> TList = new List<File>();
    do
    {
        var children = request.Execute();

        foreach (var child in children.Files)
        {
            System.Threading.Thread.Sleep(10);
            TList.Add(service.Files.Get(child.Id).Execute());
        }
        request.PageToken = children.NextPageToken;
    } while (!String.IsNullOrEmpty(request.PageToken));

    return TList;
}

1 个答案:

答案 0 :(得分:0)

第二个选项是从共享文件夹中获取文件的最佳方法。如此相关SO post中所述,使用带有父查询的文件/列表。

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

速度取决于该共享文件夹下的文件大小/多少。

希望这有帮助。