2016-04-06 18 views
0

署名付きURLを作成する前にオブジェクトをチェックする必要があります。私はカスタムExpiresを使用する必要があります。私は次のコードを使用しています。Node.JSのAWS S3バケットにオブジェクトがあります

var AWS = require('aws-sdk'); 
AWS.config.update({accessKeyId: 'YOURKEY', secretAccessKey:'YOURSECRET'}); 
var s3 = new AWS.S3() 
params = {Bucket:'BUCKET_NAME', Key: 'TEST.pdf', Expires: 10000} 

s3.headObject(params, function(err, data) { 
    if (err) console.log(err,err.code); // an error occurred 
    else  
    { 
     s3.getSignedUrl('getObject', params, function (err, url) { 
     if (err) { 
     console.log('error: ' + err); 
     } else { 
      console.log('Signed URL: ' + url); 
     } 
     }); 
    }   // successful response 
}); 

headObjectで次のエラーが発生しています。私はheadObjectがExpiriesをサポートしていないことを知っています。

{ [UnexpectedParameter: Unexpected key 'Expires' found in params] 
    message: 'Unexpected key \'Expires\' found in params', 
    code: 'UnexpectedParameter', 
    time: Wed Apr 06 2016 10:14:53 GMT-0500 (CDT) } 

headheadとgetSignedUrlの両方でカスタム期限切れのparamsを使用するにはどうすればよいですか?

+0

'headObject'呼び出し用のparamsオブジェクトと' getSignedUrl'呼び出し用のもう1つのparamsオブジェクトを作成します。なぜあなたは両方の呼び出しで同じオブジェクトを使用する必要があると思いますか? –

+0

私はそれを行うことができます。有効期限が切れていないと、デフォルトは900秒です。私はカスタムの有効期限を使用する方法を見つけるためにこの質問を投稿しました。 – Lutfor

+0

私はあなたが理解しているとは思わない。 HeadObjectは、あなたのエラーメッセージが言っているものとまったく同じexpiresパラメータをとらないので、そのメソッド呼び出しにexpiresパラメータを渡すことはできません。そのメソッド呼び出しで渡すのは意味がありません。なぜなら、オブジェクト上に何も設定していないからです。単純にオブジェクトデータを取得するだけです。そのメソッド呼び出しの有効期限を設定するものは何もありません。期限切れにする必要があるURLを作成するのは、getSignedUrlメソッド呼び出しでexpiresヘッダーを渡すだけです。 –

答えて

2

問題を解決するための正確なコードは次のとおりです。あなたが得ているエラーメッセージを読むだけであれば、これは本当に自明です。

var AWS = require('aws-sdk'); 
AWS.config.update({accessKeyId: 'YOURKEY', secretAccessKey:'YOURSECRET'}); 
var s3 = new AWS.S3() 
headParams = {Bucket:'BUCKET_NAME', Key: 'TEST.pdf'} 
urlParams = {Bucket:'BUCKET_NAME', Key: 'TEST.pdf', Expires: 10000} 

s3.headObject(headParams, function(err, data) { 
    if (err) console.log(err,err.code); // an error occurred 
    else  
    { 
     s3.getSignedUrl('getObject', urlParams, function (err, url) { 
     if (err) { 
     console.log('error: ' + err); 
     } else { 
      console.log('Signed URL: ' + url); 
     } 
     }); 
    }   // successful response 
}); 
+0

私はその解決策を知っていました。とにかく、あなたの入力をありがとう。 – Lutfor

+0

さて、私はあなたの質問を推測する "どのようにheadObjectとgetSignedUrlの両方でカスタム期限切れのparamsを使うことができますか?"あなたができないということです。それは意味をなさないので、試してはいけません。 –

+0

console.logではなく、Signed URLの値をどのように返すのですか? –

関連する問題