2017-08-19 39 views
0

我对其他Google用户拥有对共享文件夹的读/写权限。使用Drive api V3检索共享文件夹中的文件,

我想使用驱动器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; 
} 

回答

0

第二个选择是最好的方式从共享文件夹获取文件。如此相关SO post中所述,使用包含父查询的文件/列表。

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

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

希望这会有所帮助。