listObjectsV2()에 버킷 이름과 파일 경로를 담은 params 객체를 넘겨주면 최대 1000개의 파일을 가져올 수 있는데, 그보다 많은 파일들을 가져올 때 아래처럼 작성하면 된다.
IsTruncated
값이 false면 더이상 응답할 파일이 없는 것이고 true면 아직 응답할 파일들이 남아있는 것이다. 그래서 true면 계속 objects라는 배열에 응답 파일들을 붙여준다. 그리고 NextContinuationToken
은 IsTruncated
가 true일 때 응답되어진다. 이 난독화된 key를 가지고 다음 요청에 ContinuationToken
로 전달하게 되면 그 다음 파일들을 가져올 수 있게 된다. 결국 페이지네이션을 해주는 값이라고 보면 된다.
const params = {
Bucket: 'bucket-name',
Prefix: `${process.env.NODE_ENV}/`,
};
async getObjects(params) {
let objects = [];
let res;
try {
do {
// eslint-disable-next-line no-await-in-loop
res = await this.s3.listObjectsV2(params).promise();
objects = objects.concat(res.Contents.slice(1));
if (res.IsTruncated) {
// eslint-disable-next-line no-param-reassign
params.ContinuationToken = res.NextContinuationToken;
}
} while (res.IsTruncated);
return objects;
} catch (error) {
console.error(error);
return false;
}
}
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjectsV2-property
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/API/API_ListObjectsV2.html