es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede obtener el ACL del objeto s3 utilizando AWS SDK en go.

Estoy intentando listar los objetos de un cubo utilizando el ejemplo oficial.

    err = svc.ListObjectsPages(&s3.ListObjectsInput{
        Bucket: &bucketName,
    }, func(p *s3.ListObjectsOutput, last bool) (shouldContinue bool) {
        fmt.Println("Página,", i)
        i++

        for _, obj := range p.Contents {
            fmt.Println("Objeto:", *obj.Key)
        }
        return true
    })

Sin embargo, veo que el tipo s3.Object no tiene ninguna información de ACL asociada.

¿Cómo puedo obtener la información de ACL del objeto s3.Object?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener la información de ACL asociada a un s3.Object en el AWS SDK para Go, puedes utilizar el método GetObjectAcl del cliente s3.S3. Aquí hay un ejemplo de cómo modificar el código existente para incluir la información de ACL:

    err = svc.ListObjectsPages(&s3.ListObjectsInput{
        Bucket: &bucketName,
    }, func(p *s3.ListObjectsOutput, last bool) (shouldContinue bool) {
        fmt.Println("Página,", i)
        i++
    
        for _, obj := range p.Contents {
            fmt.Println("Objeto:", *obj.Key)
    
            aclOutput, err := svc.GetObjectAcl(&s3.GetObjectAclInput{
                Bucket: &bucketName,
                Key:    obj.Key,
            })
            if err != nil {
                fmt.Println("Error al obtener el ACL del objeto:", err)
            } else {
                for _, grant := range aclOutput.Grants {
                    fmt.Printf("  Concesión: %v\n", grant)
                }
            }
        }
    
        return true
    })
    

    En este código modificado, después de iterar sobre cada objeto en el bucket, se llama al método GetObjectAcl en la clave de cada objeto para obtener la información de ACL. El GetObjectAclInput requiere el nombre del bucket y la clave del objeto como parámetros de entrada, los cuales se obtienen de las estructuras s3.ListObjectsOutput y s3.Object, respectivamente.

    El método GetObjectAcl devuelve una estructura s3.GetObjectAclOutput, la cual contiene una lista de estructuras s3.Grant que representan las concesiones de ACL asociadas al objeto. En este ejemplo, las concesiones de ACL se imprimen en la consola utilizando fmt.Printf.

Comments are closed.