How to get over 1000 objects from s3

x·2022년 1월 12일
0

listObjectsV2()에 버킷 이름과 파일 경로를 담은 params 객체를 넘겨주면 최대 1000개의 파일을 가져올 수 있는데, 그보다 많은 파일들을 가져올 때 아래처럼 작성하면 된다.

IsTruncated 값이 false면 더이상 응답할 파일이 없는 것이고 true면 아직 응답할 파일들이 남아있는 것이다. 그래서 true면 계속 objects라는 배열에 응답 파일들을 붙여준다. 그리고 NextContinuationTokenIsTruncated가 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

0개의 댓글