1. ホーム
  2. node.js

[解決済み] AWS S3 Node.JS sdkのオブジェクトが存在するかどうかを判断する方法

2023-02-17 17:27:57

質問

AWS SDKを使用して、ファイルが存在するかどうかを確認する必要があります。以下は、私が行っていることです。

var params = {
    Bucket: config.get('s3bucket'),
    Key: path
};

s3.getSignedUrl('getObject', params, callback);

これは動作しますが、問題は、オブジェクトが存在しない場合、コールバック(引数errとurl)はエラーを返さず、私がURLにアクセスしようとすると、それは"NoSuchObject"と表示されることです。

この getSignedUrl メソッドはオブジェクトが存在しない場合、エラーオブジェクトを返すべきではありませんか?オブジェクトが存在するかどうかを判断するにはどうすればよいですか?返された URL で本当に電話をかける必要があるのでしょうか?

どのように解決するのですか?

署名付きURLを作成する前に、バケツから直接ファイルが存在するかどうかを確認する必要があります。 そのための1つの方法として、HEADメタデータを要求する方法があります。

// Using callbacks
s3.headObject(params, function (err, metadata) {  
  if (err && err.name === 'NotFound') {  
    // Handle no object on cloud here  
  } else if (err) {
    // Handle other errors here....
  } else {  
    s3.getSignedUrl('getObject', params, callback);  
    // Do stuff with signedUrl
  }
});

// Using async/await
try {
  await s3.headObject(params).promise();
  const signedUrl = s3.getSignedUrl('getObject', params);
  // Do stuff with signedUrl
} catch (error) {
  if (error.name === 'NotFound') {
    // Handle no object on cloud here...
  } else {
    // Handle other errors here....
  }
}