Node.js AWS S3 파일 처리 연동 팁
2017. 6. 20. 15:12ㆍ서버 프로그래밍
Nodejs를 위한 S3 SDK
https://opentutorials.org/module/1946/11797
이미지 업로드 예제
var
AWS = require(
'aws-sdk'
);
var
fs = require(
'fs'
);
AWS.config.region =
'ap-northeast-2'
;
var
s3 =
new
AWS.S3();
var
param = {
'Bucket'
:
'codingeverybody2'
,
'Key'
:
'logo.png'
,
'ACL'
:
'public-read'
,
'Body'
:fs.createReadStream(
'94.png'
),
'ContentType'
:
'image/png'
}
s3.upload(param,
function
(err, data){
console.log(err);
console.log(data);
})
이미지 목록 조회 예제
var
AWS = require(
'aws-sdk'
);
AWS.config.region =
'ap-northeast-2'
;
var
s3 =
new
AWS.S3();
s3.listObjects({Bucket:
'codingeverybody2'
}).on(
'success'
,
function
handlePage(response) {
for
(
var
name
in
response.data.Contents){
console.log(response.data.Contents[name].Key);
}
if
(response.hasNextPage()) {
response.nextPage().on(
'success'
, handlePage).send();
}
}).send();
listObjects 메소드는 1000개까지만 리턴하므로, 1000개 이상의 파일을 조회하려면 다음과 같이 recursive하게 구현해야 한다.
var allKeys = [];
function listAllKeys(marker, cb)
{
s3.listObjects({Bucket: s3bucket, Marker: marker}, function(err, data){
allKeys.push(data.Contents);
if(data.IsTruncated)
listAllKeys(data.NextMarker, cb);
else
cb();
});
}
파일 삭제 예제
https://stackoverflow.com/questions/20207063/how-can-i-delete-folder-on-s3-with-node-js
function emptyBucket(bucketName,callback){
var params = {
Bucket: bucketName,
Prefix: 'folder/'
};
s3.listObjects(params, function(err, data) {
if (err) return callback(err);
if (data.Contents.length == 0) callback();
params = {Bucket: bucketName};
params.Delete = {Objects:[]};
data.Contents.forEach(function(content) {
params.Delete.Objects.push({Key: content.Key});
});
s3.deleteObjects(params, function(err, data) {
if (err) return callback(err);
if(data.Contents.length == 1000)emptyBucket(bucketName,callback);
else callback();
});
});
}