Curl carga con éxito el archivo a S3 usando una URL firmada:
curl -v -k -X PUT \ -H "x-amz-server-side-encryption: AES256" \ -H "Content-Type: application/pdf" \ -T "__tests__/resources/test.pdf" \ "http://mybucket.s3.amazonaws.com/test.pdf?AWSAccessKeyId=IDKEY&Expires=1489458783&Signature=SIGNATUREIntenté replicar esto en Grails usando el complemento del cliente REST:
String url = "http://mybucket.s3.amazonaws.com/test.pdf?AWSAccessKeyId=IDKEY&Expires=1489458783&Signature=SIGNATURE" RestResponse resp = rest.put(url){ header "x-amz-server-side-encryption", "AES256" header "Content-Type", "application/pdf" body pdf }Pero Amazon rechaza la carga, diciendo que los argumentos son incorrectos... probablemente debido a que el pdf se envió como un parámetro de "cuerpo". ¿Algunas ideas?
En lugar de usar un cliente de reposo para cargar, sería más sencillo usar el SDK de Java de AWS en su aplicación Grails.
Vea un ejemplo aquí del uso de una URL prefirmada para cargar http://docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObjectJavaSDK.html