2017-06-25 4 views
0

J'essaye de créer une URL prédéfinie pour un fichier privé test.png sur S3. Mon code:Les URL signées AWS S3 avec aws-sdk échouent avec "AuthorizationQueryParametersError"

var AWS = require('aws-sdk'); 

AWS.config.region = 'eu-central-1'; 

const s3 = new AWS.S3(); 

const key = 'folder/test.png'; 
const bucket = 'mybucket'; 
const expiresIn = 2000; 

const params = { 
    Bucket: bucket, 
    Key: key, 
    Expires: expiresIn, 
}; 
console.log('params: ', params); 
console.log('region: ', AWS.config.region); 

var url = s3.getSignedUrl('getObject', params); 
console.log('url sync: ', url); 

s3.getSignedUrl('getObject', params, function (err, urlX) { 
    console.log("url async: ", urlX); 
}); 

Wich retourne une url dans la console. Lorsque je tente d'y accéder, il montre

<Error> 
<Code>AuthorizationQueryParametersError</Code> 
<Message> 
Query-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders, and X-Amz-Expires parameters. 
</Message> 
<RequestId>97377E063D0B1D09</RequestId> 
<HostId> 
6GE7EdqUvCEJis+fPoWR0Ffp2kN9Mlql4gs+qB4uY3hA4qR2wYrImkZfv05xy4XVjsZnRDVN63s= 
</HostId> 
</Error> 

Je suis tout à fait coincé et serait vraiment apprécier une idée sur la façon de le résoudre ... Merci!

+0

Cela devrait. Pouvez-vous donner un exemple? –

Répondre

0

J'ai testé votre code. J'ai seulement fait des modifications à key et bucket. Ça marche. puis-je connaître la version d'aws sdk que vous utilisez et la version de nodejs que vous utilisez? mon test a été exécuté sur nodejs 8.1.2 et [email protected].

J'ai été capable de reproduire votre erreur lorsque j'ai exécuté curl.

curl url (mal) -> <Error><Code>AuthorizationQueryParametersError</Code><Message>Query-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders, and X-Amz-Expires parameters.</Message>

curl "url" (travaillé)

si vous courbez sans les guillemets, esperluette est interprété par le shell comme un processus d'arrière-plan.

Vous pouvez également essayer de coller le lien généré dans un navigateur.

Espérons que cela aide. L'URL signée ne possède-t-elle pas tous les paramètres répertoriés dans l'erreur?