본 수업에서는 nodejs를 이용해서 s3를 제어하는 방법을 알아봅니다. 특히 후반부에서는 웹애플리케이션에서 s3를 어떻게 활용할 수 있는가를 다루고 있습니다.
선수학습
Nodejs를 위한 AWS SDK 수업을 먼저 들어야 합니다.
권한
본 수업을 진행하기 위해서는 사용자나 역할이 AmazonS3FullAccess 권한이 있어야 합니다. iam을 이용해주세요.
API 사용법
업로드
s3_put.js
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); })
nodejs stream에 대한 좀 더 자세한 내용은 Nanha Park님의 Stream 시리즈를 보실 것을 권합니다.
목록
s3_list.js
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();
다운로드
s3_get.js
var AWS = require('aws-sdk'); AWS.config.region = 'ap-northeast-2'; var s3 = new AWS.S3(); var file = require('fs').createWriteStream('logo.png'); var params = {Bucket:'codingeverybody2', Key:'logo.png'}; s3.getObject(params).createReadStream().pipe(file);
nodejs 웹에플리케이션에서 s3 SDK 활용
s3_app.js
var express = require('express'); var formidable = require('formidable'); var AWS = require('aws-sdk'); AWS.config.region = 'ap-northeast-2'; var app = express(); app.get('/s3', function(req, res){ console.log(1); res.send('Hello s3'); }); app.get('/form', function(req, res){ var output = ` <html> <body> <form enctype="multipart/form-data" method="post" action="upload_receiver"> <input type="file" name="userfile"> <input type="submit"> </form> </body> </html> `; res.send(output); }); app.post('/upload_receiver', function(req, res){ var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files){ var s3 = new AWS.S3(); var params = { Bucket:'codingeverybody2', Key:files.userfile.name, ACL:'public-read', Body: require('fs').createReadStream(files.userfile.path) } s3.upload(params, function(err, data){ var result=''; if(err) result = 'Fail'; else result = `<img src="${data.Location}">`; res.send(`<html><body>${result}</body></html>`); }); }); }); app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); }); app.listen(80, function(){ console.log('Connected'); })