Tengo una carpeta en un cubo con 10,000 archivos. Parece que no hay forma de subirlos y hacerlos públicos de inmediato. Así que los subí todos, son privados y necesito hacerlos públicos.
Probé la consola de AWS, solo da un error (funciona bien con carpetas con menos archivos).
Intenté usar la organización S3 en Firefox, lo mismo.
¿Existe algún software o script que pueda ejecutar para hacerlos públicos?
amazon-s3
amazon-web-services
PeterV
fuente
fuente
Respuestas:
Puede generar una política de depósito (consulte el ejemplo a continuación) que da acceso a todos los archivos del depósito. La política de depósito se puede agregar a un depósito a través de la consola de AWS.
Consulte también la siguiente herramienta generadora de políticas proporcionada por Amazon.
http://awspolicygen.s3.amazonaws.com/policygen.html
fuente
bucket/avatars/*
. (No olvides el*
al final. Lo hice y corrí en círculos por un tiempo.)Si está cargando por primera vez, puede configurar los archivos para que sean públicos al cargarlos en la línea de comando:
Como se documenta en Uso de comandos s3 de alto nivel con la interfaz de línea de comandos de AWS
Desafortunadamente, solo aplica la ACL cuando se cargan los archivos. No aplica (en mis pruebas) la ACL a archivos ya cargados.
Si desea actualizar los objetos existentes, solía poder sincronizar el depósito consigo mismo, pero parece que ha dejado de funcionar.
[Ya no funciona] Esto se puede hacer desde la línea de comando:
(Entonces esto ya no responde a la pregunta, sino que deja la respuesta como referencia, ya que solía funcionar).
fuente
Tuve que cambiar varios cientos de miles de objetos. Encendí una instancia EC2 para ejecutar esto, lo que hace que todo sea más rápido.
aws-sdk
Primero querrás instalar la gema.Aquí está el código:
fuente
Tuve el mismo problema, la solución de @DanielVonFange está desactualizada, ya que está disponible una nueva versión de SDK.
Agregando un fragmento de código que me funciona en este momento con AWS Ruby SDK:
fuente
Solo quería agregar que con la nueva consola S3, puede seleccionar su (s) carpeta (s) y seleccionar
Make public
hacer públicos todos los archivos dentro de las carpetas. Funciona como una tarea en segundo plano, por lo que debería manejar cualquier cantidad de archivos.fuente
Usando el 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)}'
fuente
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)}'
Tenía esta necesidad yo mismo, pero la cantidad de archivos hace que sea MUY lento para hacer en serie. Así que escribí un guión que lo hace en iron.io 's cerrajero de servicio. Sus 500 horas de computación gratuitas por mes son suficientes para manejar incluso grandes depósitos (y si lo excede, el precio es razonable). Como se hace en paralelo se completa en menos de un minuto para los 32.000 objetos que tenía. También creo que sus servidores funcionan con EC2, por lo que la comunicación entre el trabajo y S3 es rápida.
Cualquiera puede utilizar mi script para sus propias necesidades.
fuente
Eche un vistazo a BucketExplorer , gestiona muy bien las operaciones masivas y es un cliente S3 sólido.
fuente
Pensarías que harían público la lectura del comportamiento predeterminado, ¿no? :) Compartí su frustración mientras creaba una API personalizada para interactuar con S3 desde una solución C #. Aquí está el fragmento que logra cargar un objeto S3 y configurarlo en acceso de lectura pública de forma predeterminada:
La función ToACLString (acl) devuelve lectura pública , BASE_SERVICE_URL es s3.amazonaws.com y la constante AWS_ACL_HEADER es x-amz-acl . El plug y DreamMessage probablemente le parecerán extraños ya que estamos usando el marco de Dream para optimizar nuestras comunicaciones http. Básicamente, estamos haciendo un http PUT con los encabezados especificados y una firma de encabezado especial según las especificaciones de aws (consulte esta página en los documentos de aws para ver ejemplos de cómo construir el encabezado de autorización).
Para cambiar las ACL de 1000 objetos existentes, puede escribir un script, pero probablemente sea más fácil usar una herramienta GUI para solucionar el problema inmediato. Lo mejor que he usado hasta ahora es de una empresa llamada Cloudberry para S3; parece que tienen una prueba gratuita de 15 días para al menos uno de sus productos. Acabo de verificar que le permitirá seleccionar varios objetos a la vez y establecer su ACL en público a través del menú contextual. ¡Disfruta la nube!
fuente