2017-06-25 80 views
0

我正嘗試在S3上爲私有文件test.png創建一個預先登記的URL。 我的代碼:帶有aws-sdk的AWS S3簽名URL與「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); 
}); 

至極返回控制檯的URL。 當我嘗試訪問它,它顯示

<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> 

我完全卡住,真的希望如何解決它的一些想法... 謝謝!

+0

簽名的URL是否沒有錯誤中列出的所有參數?這應該。你能舉一個例子嗎? –

回答

0

我測試了你的代碼。我只修改了keybucket。有用。我可以知道你正在使用的aws sdk版本和你正在使用的nodejs版本嗎?我的測試是在nodejs 8.1.2和[email protected]上執行的。

當我執行卷曲時,我能夠重現您的錯誤。

curl url(錯誤) - > <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"(工作)

,如果你不捲曲的雙引號,符號是由shell作爲後臺進程解釋。

或者,您可以嘗試在瀏覽器中粘貼生成的鏈接。

希望這會有所幫助。