Télécharger s3 avec curl à l'aide de pré-signé URL (403)

J'utilise curl pour appeler en Java API ReST pour récupérer une URL. Java génère ensuite un pré-signé URL S3 charger à l'aide de mon S3 informations d'identification, et les retours que dans le Reste de la réponse. Curl prend l'URL et l'utilise pour télécharger les S3, S3 mais renvoie 403 "La demande de la signature, nous avons calculé ne correspond pas à la signature que vous avez fournis. Vérifiez votre clé et la signature de la méthode."

Voici le code que j'utilise pour générer le pré-signée URL:

public class S3Util {
    static final AmazonS3 s3 = new AmazonS3Client( new AWSCredentials() {
        @Override
        public String getAWSAccessKeyId() {
            return "XXXXXXX";
        }
        @Override
        public String getAWSSecretKey() {
            return "XXXXXXXXXXXXXX";
        }
    });
    static final String BUCKET = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";

    static public URL getMediaChunkURL( MediaChunk mc, HttpMethod method ) {
        String key = ...
        //way in the future (for testing)...
        Date expiration = new Date( System.currentTimeMillis() + CalendarUtil.ONE_MINUTE_IN_MILLISECONDS*60*1000 );

        GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(BUCKET, key, method);
        req.setExpiration(expiration);
        req.addRequestParameter("Content-Type", "application/octet-stream");

        //this gets passed to the end user:
        return s3.generatePresignedUrl(req);
    }
}

et en curl, exécuter à partir du bash, j'exécute ceci:

echo Will try to upload chunk to ${location}
curl -i -X POST \
        -F 'Content-Type=application/octet-stream' \
        -F "file=@${fileName}" \
        ${location} || (echo upload chunk failed. ; exit 1 )

Entre autres choses, j'ai essayé de METTRE, et j'ai essayé "Content-type" (T minuscule). Je me rends compte que je suis en manque de quelque chose (ou des choses) c'est évident, mais après la lecture de l'appropriées docs, google et en regardant beaucoup de questions similaires, je ne suis pas sûr de ce qui est. Je vois beaucoup de conseils sur les en-têtes, mais je pensais que le démissionné URL était censé éliminer ces besoins. Peut-être pas?

TIA!

Mise à jour:

Juste pour être clair, j'ai testé les téléchargements, et qui fonctionne très bien.

Java ressemble:

GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(BUCKET, key, HttpMethod.GET);
req.setExpiration(expiration);

et curl est tout simplement:

curl -i ${location}

OriginalL'auteur Bjorn Roche | 2012-01-30