2017-08-19 16 views
0

他のGoogleユーザーと共有フォルダに対する読み取り/書き込み権限があります。ドライブ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} 

スピードは、その共有フォルダの下にあるファイルのサイズ/数によって異なります。

これが役に立ちます。

関連する問題