J'ai un dossier dans un seau avec 10 000 fichiers. Il semble qu'il n'y ait aucun moyen de les télécharger et de les rendre publics immédiatement. Alors je les ai tous téléchargés, ils sont privés et je dois les rendre tous publics.
J'ai essayé la console aws, cela donne juste une erreur (fonctionne bien avec les dossiers avec moins de fichiers).
J'ai essayé d'utiliser l'organisation S3 dans Firefox, même chose.
Existe-t-il un logiciel ou un script que je peux exécuter pour rendre tout cela public?
Réponses:
Vous pouvez générer une stratégie de compartiment (voir l'exemple ci-dessous) qui donne accès à tous les fichiers du compartiment. La stratégie de compartiment peut être ajoutée à un compartiment via la console AWS.
Regardez également l'outil de génération de politiques suivant fourni par Amazon.
http://awspolicygen.s3.amazonaws.com/policygen.html
la source
bucket/avatars/*
. (N'oubliez pas le*
à la fin. Je l'ai fait et j'aiSi vous téléchargez pour la première fois, vous pouvez définir les fichiers comme publics lors du téléchargement sur la ligne de commande:
Comme indiqué dans Utilisation des commandes s3 de haut niveau avec l'interface de ligne de commande AWS
Malheureusement, il n'applique l'ACL que lorsque les fichiers sont téléchargés. Il n'applique pas (dans mes tests) l'ACL aux fichiers déjà téléchargés.
Si vous souhaitez mettre à jour des objets existants, vous pouviez auparavant synchroniser le compartiment avec lui-même, mais cela semble avoir cessé de fonctionner.
[Ne fonctionne plus] Cela peut être fait à partir de la ligne de commande:
(Donc, cela ne répond plus à la question, mais en laissant la réponse pour référence, car cela fonctionnait.)
la source
J'ai dû changer plusieurs centaines de milliers d'objets. J'ai lancé une instance EC2 pour l'exécuter, ce qui accélère le processus. Vous voudrez d'abord installer la
aws-sdk
gemme.Voici le code:
la source
J'ai eu le même problème, la solution de @DanielVonFange est obsolète, car la nouvelle version du SDK est sortie.
Ajout d'un extrait de code qui fonctionne pour moi en ce moment avec AWS Ruby SDK:
la source
Je voulais juste ajouter qu'avec la nouvelle console S3, vous pouvez sélectionner vos dossiers et choisir
Make public
de rendre tous les fichiers à l'intérieur des dossiers publics. Il fonctionne comme une tâche d'arrière-plan et doit donc gérer n'importe quel nombre de fichiers.la source
Utilisation du cli:
aws s3 ls s3://bucket-name --recursive > all_files.txt && grep .jpg all_files.txt > files.txt && cat files.txt | awk '{cmd="aws s3api put-object-acl --acl public-read --bucket bucket-name --key "$4;system(cmd)}'
la source
aws s3 ls s3://bucket-name --recursive | grep .jpg | awk '{cmd="aws s3api put-object-acl --acl public-read --bucket bucket-name --key "$4;system(cmd)}'
J'avais ce besoin moi-même, mais le nombre de fichiers rend le travail lent en série. J'ai donc écrit un script qu'il fait sur iron.io de ferronnier service. Leurs 500 heures de calcul gratuites par mois sont suffisantes pour gérer même de gros seaux (et si vous dépassez cela, le prix est raisonnable). Comme il se fait en parallèle, il se termine en moins d'une minute pour les 32 000 objets que j'avais. Je crois également que leurs serveurs fonctionnent sur EC2, donc la communication entre le travail et S3 est rapide.
Tout le monde est invité à utiliser mon script pour ses propres besoins.
la source
Jetez un œil à BucketExplorer, il gère très bien les opérations en bloc et est un client S3 solide.
la source
Vous penseriez qu'ils rendraient public la lecture du comportement par défaut, n'est-ce pas? :) J'ai partagé votre frustration lors de la création d'une API personnalisée pour l'interface avec S3 à partir d'une solution C #. Voici l'extrait de code qui permet de télécharger un objet S3 et de le définir par défaut sur un accès en lecture publique:
La fonction ToACLString (acl) renvoie une lecture publique , BASE_SERVICE_URL est s3.amazonaws.com et la constante AWS_ACL_HEADER est x-amz-acl . Le plug-in et le contenu de DreamMessage vous sembleront probablement étranges, car nous utilisons le framework Dream pour rationaliser nos communications http. Essentiellement, nous faisons un http PUT avec les en-têtes spécifiés et une signature d'en-tête spéciale par spécifications aws (voir cette page dans la documentation aws pour des exemples de construction de l'en-tête d'autorisation).
Pour modifier une liste de contrôle d'accès à 1000 objets existante, vous pouvez écrire un script, mais il est probablement plus facile d'utiliser un outil GUI pour résoudre le problème immédiat. Le meilleur que j'ai utilisé jusqu'à présent provient d'une société appelée cloudberry pour S3; il semble qu'ils bénéficient d'un essai gratuit de 15 jours pour au moins un de leurs produits. Je viens de vérifier que cela vous permettra de sélectionner plusieurs objets à la fois et de définir leur ACL sur public via le menu contextuel. Profitez du cloud!
la source