[Multer-S3] S3 버킷 전체 목록 불러오기

S3 버킷 전체 목록 불러오기

require('dotenv').config()
const express = require('express')
const app = express();
const PORT = 9000;
const multer = require('multer')
const multerS3 = require('multer-s3')
const AWS = require('aws-sdk');

// ! s3 객체 생성
const s3 = new AWS.S3({
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY_ID,
    region: 'ap-northeast-2',
    params: {
        Bucket: process.env.BUCKET_NAME
    }
});

// ! 3. s3 버킷 전체 목록가져오기
function listObjects(params) {
    s3.listObjectsV2(params, (err, data) => {
        // console.log(s3) 
        // console.log(data)
        // console.log(data.Contents)
        // console.log(data.Key) // ! undefined
        // console.log(data.Contents.Key) // ! undefined

        // ! S3 버킷 내 사진 이름만 가져오기
        const buket_list = data.Contents;
        buket_list.forEach((content) => {
            lists.push(content.Key)
        })
        console.log(lists)
    })
}

// ! 3. s3 버킷 전체 목록 가져오기
app.get('/list', (req, res) => {
    res.send(listObjects())
})

app.listen(PORT, () => {
    console.log(`listen on ${PORT}`)
})

PostMan Test

  • Get메소드로 S3 버킷에 있는 목록 불러오는 것을 요청했다.

Result

  • console.log(s3)
Service {
    config: Config {
      credentials: Credentials {
        expired: false,
        expireTime: null,
        refreshCallbacks: [],
        accessKeyId: 'ACCESS_KEY_ID',
        sessionToken: undefined
      },
      credentialProvider: CredentialProviderChain {
        providers: [Array],
        resolveCallbacks: []
      },
      region: 'ap-northeast-2',
      logger: null,
      apiVersions: {},
      apiVersion: null,
      endpoint: 'S3 엔드포인트',
      httpOptions: { timeout: 120000 },
      .
      .
      .
      .
      .
      accessKeyId: 'ACCESS_KEY_ID',
      secretAccessKey: 'SECRET_ACCESS_KEY_ID',
      params: { Bucket: 'BUCKET_NAME' }
    },
    isGlobalEndpoint: false,
    endpoint: Endpoint {
      protocol: 'https:',
      host: 'S3 엔드포인트',
      port: 443,
      hostname: 'S3 엔드포인트',
      pathname: '/',
      path: '/',
      href: 'https://S3 엔드포인트/'
    },
    _events: {
      apiCallAttempt: [ [Function: EVENTS_BUBBLE] ],
      apiCall: [ [Function: CALL_EVENTS_BUBBLE] ]
    },
    MONITOR_EVENTS_BUBBLE: [Function: EVENTS_BUBBLE],
    CALL_EVENTS_BUBBLE: [Function: CALL_EVENTS_BUBBLE],
    _clientId: 1
  }
  • console.log(data)
  • console.log(data.Contents)
  • console.log(lists)

🚨 Problem

PostMan을 이용해서 요청을 했지만, 데이터를 받아오진 못했음.
위의 정보는 console.log로 찍어서 나온것임.
그렇다면 res.send로 데이터를 나오게 하려면 어떻게 해야할까? 😭

좋은 웹페이지 즐겨찾기