La aplicación en la que estoy trabajando actualmente usa Amazon S3 Stream Wrapper para PHP para escribir mensajes de registro en un depósito S3 y necesito transferirlo a Golang. ¿Hay un equivalente a esto en Go? El método PutObject sobrescribe todo el contenido y solo quiero agregarlo. En PHP estamos usando fopen() y fwrite() para agregar una cadena a un depósito existente. Esperaba poder hacer
os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600) pero me sale un error diciendo que el archivo no existe. Intenté usar tanto s3:// como el enlace https:// al archivo de registro.
Aquí está el ejemplo de Amazon para PHP:
$stream = fopen('s3://bucket/key', 'w'); fwrite($stream, 'Hello!'); fclose($stream);Como mencionó @Rob, S3 no admite la operación de agregar https://forums.aws.amazon.com/message.jspa?messageID=540395 .
La única forma es descargar el objeto y cargar el nuevo usando aws-sdk o minio ( https://github.com/minio/minio ). Supongo que el envoltorio de PHP hace lo mismo bajo el capó.
La muestra con minio:
s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESS-KEY-HERE", "YOUR-SECRET-KEY-HERE", true) if err != nil { log.Fatalln(err) } reader, err := s3Client.GetObject("my-bucketname", "my-objectname") if err != nil { log.Fatalln(err) } defer reader.Close() // Change your data n, err := s3Client.PutObject("my-bucketname", "my-objectname", reader, "application/octet-stream") if err != nil { log.Fatalln(err) }