9
votes

Comment allez-vous lire S3 comme une structure de répertoire hiérarchique à Ruby?

Quelqu'un a-t-il eu une réussite de lire S3 Seauts sous forme de sous-dossiers?

folder1

- Subfolder2

---- File3

---- FILE4

- File1

- File2

dossier2

- Subfolder3

- File5

- File6

Ma tâche est de lire le dossier1. Je m'attends à voir Subfolder2, File1 et File2, mais pas File3 ou File4. En ce moment, parce que je limite les touches de godets au préfixe => 'folder1 /', vous obtenez toujours FILE3 et 4, car ils ont techniquement le préfixe de dossier1.

Il semble que le seul moyen de réellement que cela soit ceci est sucer dans toutes les clés sous le dossier1, puis utilisez la recherche de chaîne pour exclure réellement File3 et File4 de votre réseau de résultats.

Quelqu'un a-t-il eu d'expérience? Je connais des clients S3 de style FTP comme Transmettre et Cyberduck doit le faire, mais cela n'est pas évident de l'API S3 elle-même.

merci à venir, Conrad

J'ai regardé à la fois AWS :: S3 et Right_AWS.


2 commentaires

Merci à tout le monde pour votre réponse. J'ai fini par faire ce que la profondeur suggérée et calculée de Coreyward basée sur le nombre ('/') dans la clé.


Voici mon code: gist.github.com/797841


4 Réponses :


7
votes

L'API S3 n'a aucune notion d'un dossier. Cependant, cela permet aux noms de fichiers de fichiers de fichiers "/", et il vous permet d'interroger avec un préfixe. Vous semblez être familier avec cela déjà, mais je voulais juste être clair.

Lorsque vous interrogez avec un préfixe de dossier1 / , S3 va tout retourner sous ce "dossier". Afin de manipuler uniquement des descendants directs, vous devrez filtrer les résultats vous-même dans Ruby (choisir votre poison: rejeter ou Sélectionnez ). Cela ne va pas aider la performance (une raison commune d'utiliser des "dossiers" dans S3), mais cela fait le travail.


0 commentaires

1
votes

Vous avez rencontré une limitation de l'API S3, et le seul moyen de faire cela est de faire le filtrage sur le client.

La meilleure option (et la plus performante) serait de "miroir" votre structure de stockage S3 dans un fichier de base de données / XML, etc., et vous interrogez-vous à la place. Ensuite, récupérez simplement les fichiers de S3 lorsque l'utilisateur a trouvé les fichiers qu'ils souhaitent.


0 commentaires

0
votes

Voici un échantillon d'utilisation du système de fichiers virtuel avec pilote S3.

Comme dit avant que S3 n'a aucun concept de dossier, mais il fournit des capacités à la simuler. Le système de fichiers virtuel utilise ces capacités pour vous fournir "dossier virtuel"

http://alexeypetrushin.github.com/vfs/basics.html < / p>

http://alexeypetrushin.github.com/vfs/s3_basics.html < / p>


0 commentaires

1
votes

Mise à jour: pour la version II de l'AWS SDK

Amazon a maintenant créé des itérateurs qui permettent une "recherche préfixée". On peut l'utiliser pour émuler une structure de répertoires / dossiers. Dans l'exemple ci-dessus (en PHP), les éléments suivants doivent fonctionner: xxx


0 commentaires