Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

335
Vistas
Agregue metadatos a S3 Object, manteniendo los metadatos y ACL existentes

Estoy buscando una manera de agregar mediante programación metadatos específicos a un conjunto de objetos S3. Recientemente actualicé el código en mi proyecto para configurar el 'Control de caché: edad máxima' y 'Caduca' al cargar objetos en S3, pero ahora estoy tratando de configurar esos valores para mis objetos S3 existentes. No quiero que cambie nada más, como la ACL o cualquier otro metadato.

Intenté usar la AWS CLI para lograr esto, pero me encontré con un par de problemas. Mi depósito tiene objetos públicos y no públicos, por lo que no puedo configurar la ACL en "lectura pública". Quiero que la ACL permanezca sin cambios, pero si no configuro nada, todos se vuelven privados. Además, quiero agregar metadatos, pero mantener intactos los metadatos existentes. Aquí está la llamada cli que había intentado:

aws s3 cp s3://my-bucket s3://my-bucket --acl public-read --recursive --metadata-directive=REPLACE --cache-control max-age=2592000 --expires 'Wed, 29 July 2020 00:00:01 GMT'

Estoy usando el SDK de PHP de AWS, pero estoy abierto a otros métodos.

Para mantener los mismos metadatos, intenté usar headObject para obtener datos de encabezado existentes... pero devuelve muchos valores. Puedo iterar sobre ellos, pero no sé cuáles necesitaría volver a configurar para mantener todo.

Para mantener la misma ACL, intenté usar getObjectAcl seguido de putObjectAcl ... pero estoy bastante seguro de que esto no funcionará en todos los casos (estoy bastante seguro de que mi lógica para establecer el valor de ACL como public-read o private no es lo suficientemente robusto para todos los casos...).

 $acl_result = $s3->getObjectAcl([ 'Bucket' => $bucket, 'Key' => $object_key ]); $grants = $acl_result->get('Grants'); $owner = $acl_result->get('Owner'); ... $public = false; foreach($grants as $grant){ if(isset($grant['Grantee']['URI']) && $grant['Grantee']['URI'] == 'http://acs.amazonaws.com/groups/global/AllUsers' && $grant['Permission'] == 'READ'){ $public = true; } } $object = [ 'Bucket' => $bucket, 'Key' => $object_key, 'ACL' => ($public ? 'public-read' : 'private'), 'AccessControlPolicy' => [ 'Owner' => $owner, 'Grants' => $grants, ], ]; $s3->putObjectAcl($object);

Cualquier ayuda es apreciada. ¡Gracias!

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda