aws s3에서 php로 해당 경로에 있는 파일, 폴더를 리스트를 가져올때 아래와 같이 하면되는데..


public function getListObject($bucketName, $prefix, $delimiter, $marker){
	$response = $this->S3->listObjects(array(
		'Bucket' => $bucketName,
		'Delimiter' => $delimiter,
		'EncodingType' => 'url',
		'Marker' => $marker,
		'Prefix' => $prefix
	));

	return $response;
}

하지만 한번 listObjects를 칠때 max는 1000개다..

내가 불러올 경로의 파일, 폴더 갯수는 3000천개가 넘는데 이렇게되면 1000개를 제외한 나머지 2000여개는 짤리게된다.


한번에 전체다 불러오기 위해 아래와같이 소스를 짰다.


public function getAllListObject($bucketName, $prefix, $delimiter, $marker){

        $response = $this->S3->listObjects(array(
            'Bucket' => $bucketName,
            'Delimiter' => $delimiter,
            'EncodingType' => 'url',
            'Marker' => $marker,
            'Prefix' => $prefix
        ));

        if ((!isset($response["CommonPrefixes"])) || (!is_array($response["CommonPrefixes"]))) {
            $response["CommonPrefixes"] = array();
        }

        if ((!isset($response["Contents"])) || (!is_array($response["Contents"]))) {
            $response["Contents"] = array();
        }

        while(true) {
            if ($response["IsTruncated"]) {
                $tmp = $this->S3->listObjects(array(
                    'Bucket' => $bucketName,
                    'Delimiter' => $delimiter,
                    'EncodingType' => 'url',
                    'Marker' => $response["NextMarker"],
                    'Prefix' => $prefix
                ));

                if ((isset($tmp["CommonPrefixes"])) && (is_array($tmp["CommonPrefixes"]))) {
                    $response["CommonPrefixes"] = array_merge($response["CommonPrefixes"], $tmp["CommonPrefixes"]);
                }

                if ((isset($tmp["Contents"])) && (is_array($tmp["Contents"]))) {
                    $response["Contents"] = array_merge($response["Contents"], $tmp["Contents"]);
                }

                $response["IsTruncated"] = $tmp["IsTruncated"];
                $response["NextMarker"] = $tmp["NextMarker"];

            } else {
                break;
            }
        }

        return $response;
}


위와 같이 만들고 사용해서 프린트해보면 폴더는 $response["CommonPrefixes"]  이곳에
파일들은 $response["Contents"] 이곳에 배열로 저장되어 있는것을 확인 할 수 있다.


# bucket 에는 버킷이름

Delimiter 에는 그냥 '/' 를 넣었고

Marker는 파일경로인데 파일들은 쭉 나열했을때 어느 파일 후 부터 가져올것인지 정하는거고

Prefix 는 상위경로(어디서 가져올 것인지)이다.

'공부 > Aws' 카테고리의 다른 글

AWS SES Bounce 처리  (0) 2018.11.17
boto3 s3 remove deletemarker  (7) 2018.05.22
AWS cli s3 덮어쓰기  (0) 2018.04.27
AWS cli s3 upload  (0) 2018.04.24
AWS cli config  (0) 2018.04.24

+ Recent posts