객체가 있는지 확인하는 방법 AWS S3 Node.JS SDK
AWS SDK를 사용하여 파일이 있는지 확인해야합니다. 내가하는 일은 다음과 같습니다.
var params = {
Bucket: config.get('s3bucket'),
Key: path
};
s3.getSignedUrl('getObject', params, callback);
작동하지만 문제는 객체가 존재하지 않을 때 콜백 (err 및 url 인수 포함)이 오류를 반환하지 않으며 URL에 액세스하려고하면 "NoSuchObject"라고 표시된다는 것입니다.
이 getSignedUrl
메서드는 객체가 존재하지 않을 때 오류 객체를 반환하지 않습니까? 개체가 있는지 어떻게 확인합니까? 반환 된 URL을 호출해야합니까?
서명 된 URL을 생성하기 전에 파일이 버킷에서 직접 존재하는지 확인해야합니다. 이를 수행하는 한 가지 방법은 HEAD 메타 데이터를 요청하는 것입니다.
// Using callbacks
s3.headObject(params, function (err, metadata) {
if (err && err.code === 'NotFound') {
// Handle no object on cloud here
} else {
s3.getSignedUrl('getObject', params, callback);
}
});
// Using async/await (untested)
try {
const headCode = await s3.headObject(params).promise();
const signedUrl = await s3.getSignedUrl('getObject', params).promise();
// Do something with signedUrl
} catch (headErr) {
if (headErr.code === 'NotFound') {
// Handle no object on cloud here
}
}
headObject
방법 을 사용하여
AWS.config.update({
accessKeyId: "*****",
secretAccessKey: "****",
region: region,
version: "****"
});
const s3 = new AWS.S3();
const params = {
Bucket: s3BucketName,
Key: "filename" //if any sub folder-> path/of/the/folder.ext
}
try {
await s3.headObject(params).promise()
console.log("File Found in S3")
} catch (err) {
console.log("File not Found ERROR : " + err.code)
}
매개 변수는 상수이므로 const
. s3에서 파일을 찾을 수 없으면 오류가 발생 NotFound : null
합니다.
버킷의 작업을 적용 CORS Configuration
하려면 AWS의 각 버킷에서의 권한을 변경해야합니다 . 권한을 변경 Bucket->permission->CORS Configuration
하고이 코드를 추가합니다.
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
CORS 구성에 대한 자세한 정보 : https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html
waitFor
상태와 함께 메서드를 사용할 수도 있습니다 objectExists
. S3.headObject()
내부적으로 사용됩니다 .
var params = {
Bucket: config.get('s3bucket'),
Key: path
};
s3.waitFor('objectExists', params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
try / catch 블록이없는 가장 간단한 솔루션입니다.
const exists = await s3
.headObject({
Bucket: S3_BUCKET_NAME,
Key: s3Key,
})
.promise()
.then(
() => true,
err => {
if (err.code === 'NotFound') {
return false;
}
throw err;
}
);
다음 getObject
과 같은 방법을 사용하십시오 .
var params = {
Bucket: config.get('s3bucket'),
Key: path
};
s3.getObject(params, function(err, data){
if(err) {
console.log(err);
}else {
var signedURL = s3.getSignedUrl('getObject', params, callback);
console.log(signedURL);
}
});
Promise를 사용하는 비동기 호출 대신 Nodejs의 S3에 대한 동기 호출
var request = require("request");
var AWS = require("aws-sdk");
AWS.config.update({
accessKeyId: "*****",
secretAccessKey: "********"
});
const s3 = new AWS.S3();
var response;
function initialize(bucket,key) {
// Setting URL and headers for request
const params = {
Bucket: bucket,
Key: key
};
// Return new promise
return new Promise(function(resolve, reject) {
s3.headObject(params, function(err, resp, body) {
if (err) {
console.log('Not Found : ' + params.Key );
reject(params.Key);
} else {
console.log('Found : ' + params.Key );
resolve(params.Key);
}
})
})
}
function main() {
var foundArray = new Array();
var notFoundArray = new Array();
for(var i=0;i<10;i++)
{
var key = '1234'+ i;
var initializePromise = initialize('****',key);
initializePromise.then(function(result) {
console.log('Passed for : ' + result);
foundArray.push(result);
console.log (" Found Array : "+ foundArray);
}, function(err) {
console.log('Failed for : ' + err);
notFoundArray.push(err);
console.log (" Not Found Array : "+ notFoundArray);
});
}
}
main();
동기식 넣기 작업
var request = require("request");
var AWS = require("aws-sdk");
AWS.config.update({
accessKeyId: "*****",
secretAccessKey: "***"
});
const s3 = new AWS.S3();
var response;
function initialize(bucket,key) {
// Setting URL and headers for request
const params = {
Bucket: bucket,
Key: key
};
// Return new promise
return new Promise(function(resolve, reject) {
s3.putObject(params, function(err, resp, body) {
if (err) {
reject();
} else {
resolve();
}
})
})
}
function main() {
var promiseArray = [];
var prefix = 'abc/test/';
for(var i=0;i<10;i++)
{
var key = prefix +'1234'+ i;
promiseArray[i] = initialize('bucket',key);
promiseArray[i].then(function(result) {
console.log (" Successful ");
}, function(err) {
console.log (" Error ");
});
}
console.log('Promises ' + promiseArray);
Promise.all(promiseArray).then(function(values) {
console.log("******TESTING****");
});
}
main();
Promise. All without failure 동기 작동
var request = require("request");
var AWS = require("aws-sdk");
AWS.config.update({
accessKeyId: "*******",
secretAccessKey: "***********"
});
const s3 = new AWS.S3();
var response;
function initialize(bucket,key) {
// Setting URL and headers for request
const params = {
Bucket: bucket,
Key: key
};
// Return new promise
return new Promise(function(resolve, reject) {
s3.headObject(params, function(err, resp, body) {
if (err) {
resolve(key+"/notfound");
} else{
resolve(key+"/found");
}
})
})
}
function main() {
var foundArray = new Array();
var notFoundArray = new Array();
var prefix = 'abc/test/';
var promiseArray = [];
try{
for(var i=0;i<10;i++)
{
var key = prefix +'1234' + i;
console.log("Key : "+ key);
promiseArray[i] = initialize('bucket',key);
promiseArray[i].then(function(result) {
console.log("Result : " + result);
var temp = result.split("/");
console.log("Temp :"+ temp);
if (temp[3] === "notfound")
{
console.log("NOT FOUND");
}else{
console.log("FOUND");
}
}, function(err) {
console.log (" Error ");
});
}
Promise.all(promiseArray).then(function(values) {
console.log("^^^^^^^^^^^^TESTING****");
}).catch(function(error) {
console.error(" Errro : "+ error);
});
}catch(err){
console.log(err);
}
}
main();
참조 URL : https://stackoverflow.com/questions/26726862/how-to-determine-if-object-exists-aws-s3-node-js-sdk
'programing' 카테고리의 다른 글
내 속성 값을 내 모델 클래스의 다른 속성 값과 비교하는 사용자 지정 유효성 검사 속성 (0) | 2021.01.14 |
---|---|
매개 변수가 함수에 제공되는지 테스트하는 방법은 무엇입니까? (0) | 2021.01.14 |
Jinja2 템플릿 엔진과 함께 AngularJS를 사용할 수 있습니까? (0) | 2021.01.14 |
Python의 단일 요소 목록에서 요소 만 가져 오나요? (0) | 2021.01.14 |
순환 가져 오기가없는 Python 유형 힌트 (0) | 2021.01.14 |