Share
Sign In
📄

AWS S3, Node.js API 사용하기

getBucketList
S3에 있는 모든 버킷을 가져온다.
//input : http://@@@@.com:5000/buckets //output : List of Buckets router.get('/buckets', (req, res) => { s3.listBuckets(function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'buckets' }) } }); });
getObjectList
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
getObject로 구현
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. AWS에서는 아래의 listObjectV2를 사용하는 것을 권장한다.
//input: http://@@@@.com:5000/listObjects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/listObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.listObjects( Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
get ObjectList-V2
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. 위의 listObject 함수보다 속도가 조금 빠르다.
//input: http://@@@@.com:5000/Objects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/Objects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; s3.listObjectsV2({ Bucket: bucketName, Prefix: prefix, Delimiter:'/', },function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'objects' }) } }); });
//Respoonse { "IsTruncated": false, "Contents": [ { "Key": "@@@/@@/@/@/@@@@@.png", "LastModified": "2021-12-28T01:32:00.000Z", "ETag": "\"f92ecdb7c97c###############\"", "Size": 1843363, "StorageClass": "STANDARD" }, ], "Name": "", "Prefix": "", "Delimiter": "/", "MaxKeys": 1000, "CommonPrefixes": [ { "Prefix": "@@@@@@/" }, { "Prefix": "@@@@@@@@@/" } ], "KeyCount": 200 }
getAllObjectList
하나의 버킷에 많은 수의 오브젝트가 존재한다면, 1000개 이상이 되는 오브젝트는 가져 올 수 없다.
하지만 recursive 한 방법으로 구현할 수 있다.
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
listObject를 사용하여 구현
listObject 함수를 사용하면 NextMarker: 라는것을 이용하면 1000개 이상이어서 제한 됐을 때 이어서 불러오는 것이 가능하다.
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
listObjectV2를 사용하여 구현
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
getObject
getObject
router.get('/getObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.getObject({ Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
getImg
router.get('/getImg', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) res.writeHead(200, {'Content-Type': ' image/*' }); res.write(result); res.end('end'); }).send() })
getJson
router.get('/getJson', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/json' }); res.write(result); res.end(); }).send() })
getNpy
router.get('/getNpy', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/npy' }); res.write(result); res.end(); }).send() })
Download
// query : bucketName = 'bucket name' // query : key = 'object key' router.get('/downloads', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; //let file = fs.createWriteStream(key); let param = {Bucket :bucketName, Key : key} //s3.getObject(param).createReadStream().pipe(file); s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) // res.write(result); res.send(result); }).send() })
Import aws-sdk
const router = express.Router(); const AWS = require("aws-sdk"); AWS.config.setPromisesDependency(); AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: "ap-northeast-2", }); const s3 = new AWS.S3();
AWS 홈으로 돌아가기
AWS
메인으로 돌아가기
성호의 개발 다락방
getBucketList
S3에 있는 모든 버킷을 가져온다.
//input : http://@@@@.com:5000/buckets //output : List of Buckets router.get('/buckets', (req, res) => { s3.listBuckets(function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'buckets' }) } }); });
getObjectList
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
getObject로 구현
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. AWS에서는 아래의 listObjectV2를 사용하는 것을 권장한다.
//input: http://@@@@.com:5000/listObjects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/listObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.listObjects( Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
get ObjectList-V2
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. 위의 listObject 함수보다 속도가 조금 빠르다.
//input: http://@@@@.com:5000/Objects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/Objects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; s3.listObjectsV2({ Bucket: bucketName, Prefix: prefix, Delimiter:'/', },function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'objects' }) } }); });
//Respoonse { "IsTruncated": false, "Contents": [ { "Key": "@@@/@@/@/@/@@@@@.png", "LastModified": "2021-12-28T01:32:00.000Z", "ETag": "\"f92ecdb7c97c###############\"", "Size": 1843363, "StorageClass": "STANDARD" }, ], "Name": "", "Prefix": "", "Delimiter": "/", "MaxKeys": 1000, "CommonPrefixes": [ { "Prefix": "@@@@@@/" }, { "Prefix": "@@@@@@@@@/" } ], "KeyCount": 200 }
getAllObjectList
하나의 버킷에 많은 수의 오브젝트가 존재한다면, 1000개 이상이 되는 오브젝트는 가져 올 수 없다.
하지만 recursive 한 방법으로 구현할 수 있다.
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
listObject를 사용하여 구현
listObject 함수를 사용하면 NextMarker: 라는것을 이용하면 1000개 이상이어서 제한 됐을 때 이어서 불러오는 것이 가능하다.
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
listObjectV2를 사용하여 구현
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
getObject
getObject
router.get('/getObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.getObject({ Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
getImg
router.get('/getImg', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) res.writeHead(200, {'Content-Type': ' image/*' }); res.write(result); res.end('end'); }).send() })
getJson
router.get('/getJson', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/json' }); res.write(result); res.end(); }).send() })
getNpy
router.get('/getNpy', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/npy' }); res.write(result); res.end(); }).send() })
Download
// query : bucketName = 'bucket name' // query : key = 'object key' router.get('/downloads', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; //let file = fs.createWriteStream(key); let param = {Bucket :bucketName, Key : key} //s3.getObject(param).createReadStream().pipe(file); s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) // res.write(result); res.send(result); }).send() })
Import aws-sdk
const router = express.Router(); const AWS = require("aws-sdk"); AWS.config.setPromisesDependency(); AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: "ap-northeast-2", }); const s3 = new AWS.S3();
AWS 홈으로 돌아가기
AWS
메인으로 돌아가기
성호의 개발 다락방
getBucketList
S3에 있는 모든 버킷을 가져온다.
//input : http://@@@@.com:5000/buckets //output : List of Buckets router.get('/buckets', (req, res) => { s3.listBuckets(function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'buckets' }) } }); });
getObjectList
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
getObject로 구현
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. AWS에서는 아래의 listObjectV2를 사용하는 것을 권장한다.
//input: http://@@@@.com:5000/listObjects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/listObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.listObjects( Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
get ObjectList-V2
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. 위의 listObject 함수보다 속도가 조금 빠르다.
//input: http://@@@@.com:5000/Objects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/Objects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; s3.listObjectsV2({ Bucket: bucketName, Prefix: prefix, Delimiter:'/', },function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'objects' }) } }); });
//Respoonse { "IsTruncated": false, "Contents": [ { "Key": "@@@/@@/@/@/@@@@@.png", "LastModified": "2021-12-28T01:32:00.000Z", "ETag": "\"f92ecdb7c97c###############\"", "Size": 1843363, "StorageClass": "STANDARD" }, ], "Name": "", "Prefix": "", "Delimiter": "/", "MaxKeys": 1000, "CommonPrefixes": [ { "Prefix": "@@@@@@/" }, { "Prefix": "@@@@@@@@@/" } ], "KeyCount": 200 }
getAllObjectList
하나의 버킷에 많은 수의 오브젝트가 존재한다면, 1000개 이상이 되는 오브젝트는 가져 올 수 없다.
하지만 recursive 한 방법으로 구현할 수 있다.
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
listObject를 사용하여 구현
listObject 함수를 사용하면 NextMarker: 라는것을 이용하면 1000개 이상이어서 제한 됐을 때 이어서 불러오는 것이 가능하다.
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
listObjectV2를 사용하여 구현
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
getObject
getObject
router.get('/getObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.getObject({ Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
getImg
router.get('/getImg', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) res.writeHead(200, {'Content-Type': ' image/*' }); res.write(result); res.end('end'); }).send() })
getJson
router.get('/getJson', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/json' }); res.write(result); res.end(); }).send() })
getNpy
router.get('/getNpy', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/npy' }); res.write(result); res.end(); }).send() })
Download
// query : bucketName = 'bucket name' // query : key = 'object key' router.get('/downloads', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; //let file = fs.createWriteStream(key); let param = {Bucket :bucketName, Key : key} //s3.getObject(param).createReadStream().pipe(file); s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) // res.write(result); res.send(result); }).send() })
Import aws-sdk
const router = express.Router(); const AWS = require("aws-sdk"); AWS.config.setPromisesDependency(); AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: "ap-northeast-2", }); const s3 = new AWS.S3();
AWS 홈으로 돌아가기
AWS
메인으로 돌아가기
성호의 개발 다락방
getBucketList
S3에 있는 모든 버킷을 가져온다.
//input : http://@@@@.com:5000/buckets //output : List of Buckets router.get('/buckets', (req, res) => { s3.listBuckets(function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'buckets' }) } }); });
getObjectList
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
getObject로 구현
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. AWS에서는 아래의 listObjectV2를 사용하는 것을 권장한다.
//input: http://@@@@.com:5000/listObjects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/listObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.listObjects( Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
get ObjectList-V2
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. 위의 listObject 함수보다 속도가 조금 빠르다.
//input: http://@@@@.com:5000/Objects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/Objects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; s3.listObjectsV2({ Bucket: bucketName, Prefix: prefix, Delimiter:'/', },function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'objects' }) } }); });
//Respoonse { "IsTruncated": false, "Contents": [ { "Key": "@@@/@@/@/@/@@@@@.png", "LastModified": "2021-12-28T01:32:00.000Z", "ETag": "\"f92ecdb7c97c###############\"", "Size": 1843363, "StorageClass": "STANDARD" }, ], "Name": "", "Prefix": "", "Delimiter": "/", "MaxKeys": 1000, "CommonPrefixes": [ { "Prefix": "@@@@@@/" }, { "Prefix": "@@@@@@@@@/" } ], "KeyCount": 200 }
getAllObjectList
하나의 버킷에 많은 수의 오브젝트가 존재한다면, 1000개 이상이 되는 오브젝트는 가져 올 수 없다.
하지만 recursive 한 방법으로 구현할 수 있다.
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
listObject를 사용하여 구현
listObject 함수를 사용하면 NextMarker: 라는것을 이용하면 1000개 이상이어서 제한 됐을 때 이어서 불러오는 것이 가능하다.
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
listObjectV2를 사용하여 구현
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
getObject
getObject
router.get('/getObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.getObject({ Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
getImg
router.get('/getImg', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) res.writeHead(200, {'Content-Type': ' image/*' }); res.write(result); res.end('end'); }).send() })
getJson
router.get('/getJson', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/json' }); res.write(result); res.end(); }).send() })
getNpy
router.get('/getNpy', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/npy' }); res.write(result); res.end(); }).send() })
Download
// query : bucketName = 'bucket name' // query : key = 'object key' router.get('/downloads', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; //let file = fs.createWriteStream(key); let param = {Bucket :bucketName, Key : key} //s3.getObject(param).createReadStream().pipe(file); s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) // res.write(result); res.send(result); }).send() })
Import aws-sdk
const router = express.Router(); const AWS = require("aws-sdk"); AWS.config.setPromisesDependency(); AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: "ap-northeast-2", }); const s3 = new AWS.S3();
AWS 홈으로 돌아가기
AWS
메인으로 돌아가기
성호의 개발 다락방
getBucketList
S3에 있는 모든 버킷을 가져온다.
//input : http://@@@@.com:5000/buckets //output : List of Buckets router.get('/buckets', (req, res) => { s3.listBuckets(function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'buckets' }) } }); });
getObjectList
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
getObject로 구현
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. AWS에서는 아래의 listObjectV2를 사용하는 것을 권장한다.
//input: http://@@@@.com:5000/listObjects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/listObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.listObjects( Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
get ObjectList-V2
S3 버킷 내의 모든 오브젝트를 가져온다. 단, 최대 1000개로 제한된다. 위의 listObject 함수보다 속도가 조금 빠르다.
//input: http://@@@@.com:5000/Objects/?bucketName=<버킷이름> //output : 오브젝트 리스트 router.get('/Objects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; s3.listObjectsV2({ Bucket: bucketName, Prefix: prefix, Delimiter:'/', },function(err, data) { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); } else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'objects' }) } }); });
//Respoonse { "IsTruncated": false, "Contents": [ { "Key": "@@@/@@/@/@/@@@@@.png", "LastModified": "2021-12-28T01:32:00.000Z", "ETag": "\"f92ecdb7c97c###############\"", "Size": 1843363, "StorageClass": "STANDARD" }, ], "Name": "", "Prefix": "", "Delimiter": "/", "MaxKeys": 1000, "CommonPrefixes": [ { "Prefix": "@@@@@@/" }, { "Prefix": "@@@@@@@@@/" } ], "KeyCount": 200 }
getAllObjectList
하나의 버킷에 많은 수의 오브젝트가 존재한다면, 1000개 이상이 되는 오브젝트는 가져 올 수 없다.
하지만 recursive 한 방법으로 구현할 수 있다.
또한 일반적으로 방문한 오브젝트의 바로 하위에 있는 폴더만을 조회하고 싶을 때에 delimiter를 ‘/’로 Prefix를 key값을 주면 된다.
그렇게 하면 폴더는 json의 CommonPrefixes에 해당하는 밸류에 Array로 받을 수 있고, 파일은 Contents에 밸류 Array로 응답 받을 수 있다. 이때 Key의 개수를 알고 싶으면 KeyCount 의 밸류를 찾으면 된다.
listObject를 사용하여 구현
listObject 함수를 사용하면 NextMarker: 라는것을 이용하면 1000개 이상이어서 제한 됐을 때 이어서 불러오는 것이 가능하다.
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
listObjectV2를 사용하여 구현
router.get('/allobjects', (req, res) => { let bucketName = req.query.bucketName; let prefix = req.query.prefix; let allObjects = { Contents: [], CommonPrefixes: [], KeyCount :0 }; let opts = { Bucket: bucketName, Delimiter:'/', Prefix:prefix, } function listAllObject(token, cb){ if(token) opts.ContinuationToken = token; s3.listObjectsV2(opts, function(err, data){ console.log('Load process: ',bucketName); allObjects.Contents = [...allObjects.Contents, ...data.Contents] // allObjects.Contents.concat(data.Contents); allObjects.CommonPrefixes = [...allObjects.CommonPrefixes, ...data.CommonPrefixes] allObjects.KeyCount = allObjects.KeyCount+data.KeyCount; if(data.IsTruncated) listAllObject(data.NextContinuationToken, cb); else cb(); }); } listAllObject(undefined,()=>{ res.writeHead(200,{'Content-Type':'application/json'}); console.log('allObjects: '+ allObjects ) res.end(JSON.stringify(allObjects)); console.log({ success: true, data: 'objects' }) console.log('end') }) });
getObject
getObject
router.get('/getObjects',(req, res) => { let bucketName = req.query.bucketName; let Key = req.query.Key; s3.getObject({ Bucket: bucketName, Key : Key }, (err, data) => { if (err) { console.log(err, err.stack); res.json({'error': err.stack}); }else { res.writeHead(200,{'Content-Type':'application/json'}); res.end(JSON.stringify(data)); console.log({ success: true, data: 'getObjects' }) } }); });
getImg
router.get('/getImg', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) res.writeHead(200, {'Content-Type': ' image/*' }); res.write(result); res.end('end'); }).send() })
getJson
router.get('/getJson', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/json' }); res.write(result); res.end(); }).send() })
getNpy
router.get('/getNpy', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; let param = {Bucket :bucketName, Key : key} s3.getObject(param).on('success',(response)=>{ let result = response.data.Body console.log(typeof response.data.Body) res.writeHead(200,{'Content-Type': 'text/npy' }); res.write(result); res.end(); }).send() })
Download
// query : bucketName = 'bucket name' // query : key = 'object key' router.get('/downloads', (req,res)=>{ let bucketName = req.query.bucketName; let key = req.query.key; //let file = fs.createWriteStream(key); let param = {Bucket :bucketName, Key : key} //s3.getObject(param).createReadStream().pipe(file); s3.getObject(param).on('success',function(response){ let result = response.data.Body console.log("Key was", response.data.Body) // res.write(result); res.send(result); }).send() })
Import aws-sdk
const router = express.Router(); const AWS = require("aws-sdk"); AWS.config.setPromisesDependency(); AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: "ap-northeast-2", }); const s3 = new AWS.S3();