2017-08-19 139 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} 

速度取決於該共享文件夾下的文件的大小/多少。

希望這會有所幫助。

相關問題