2017-10-03 4 views
0

J'essaie de récupérer tous les fichiers créés dans un répertoire parent. Le répertoire parent a beaucoup de sous-répertoires suivis de fichiers dans ces répertoires.Recherche de fichiers récursivement avec google drive rest

parent 
--- sub folder1 
    --- file1 
    --- file2 

Actuellement, je suis tous les ids à détourner des sous-dossiers et la construction d'une requête telle que q: « subfolder1id » chez les parents ou « subfolder2id » chez les parents pour trouver la liste des fichiers. Ensuite, je les publie en lots. Si j'ai 100 dossiers, j'émets 10 requêtes de recherche pour une taille de lot de 10.

Existe-t-il une meilleure façon d'interroger les fichiers en utilisant google drive rest api qui me fournira tous les fichiers avec une requête?

Répondre

1

Voici une answer à votre question.

idée même de votre scénario:

folderA____ folderA1____folderA1a 
     \____folderA2____folderA2a 
        \___folderA2b 

Il 3 réponses alternatives que je pense que vous pouvez avoir une idée de.

Alternative 1. Recursion

La tentation serait de lister les enfants de dossierA, pour tous les enfants qui sont dossiers, la liste récursive leurs enfants, rincer, répétition. Dans un très petit nombre de cas, cela pourrait être la meilleure approche , mais pour la plupart, il a les problèmes suivants: -

  • Il est temps de faire lamentablement consumait un serveur aller-retour pour chaque sous-dossier. Cela dépend bien sûr de la taille de votre arbre, donc si vous pouvez garantir que la taille de votre arbre est petite, cela pourrait être OK.

Alternative 2. Le parent commun

Cela fonctionne mieux si tous les fichiers sont créés par votre application (ie. vous utilisez la portée de drive.file). En plus de la hiérarchie de dossiers ci-dessus, créez un dossier parent factice appelé "MyAppCommonParent". Comme vous créez chaque fichier en tant qu'enfant de son dossier particulier, vous aussi en faire un enfant de MyAppCommonParent. Cela devient beaucoup plus intuitif si vous vous souvenez de considérer les dossiers comme des étiquettes. Vous pouvez maintenant récupérer facilement tous les descendants en interrogeant simplement le MyAppCommonParent in parents.

Alternative 3. Les dossiers d'abord

Commencez par obtenir tous les dossiers. Oui, tous. Une fois que vous avez tous les en mémoire, vous pouvez explorer les propriétés de leurs parents et construire votre arborescence et la liste des ID de dossier. Vous pouvez ensuite faire un seul files.list?q='folderA' in parents or 'folderA1' in parents or 'folderA1a' in parents.... En utilisant cette technique, vous pouvez obtenir tout en deux appels http.

L'alternative 2 est la plus efficace, mais ne fonctionne que si vous avez le contrôle de la création de fichier. L'alternative 3 est généralement plus efficace que l'alternative 1, mais il peut y avoir certaines tailles d'arbres de petite taille où 1 est la meilleure.

+0

Je pense que l'alternative 3 est ce que je fais mais l'alternative 2 est une excellente solution. Merci beaucoup :) –