본 수업에서는 nodejs를 이용해서 s3를 제어하는 방법을 알아봅니다. 특히 후반부에서는 웹애플리케이션에서 s3를 어떻게 활용할 수 있는가를 다루고 있습니다.
선수학습
Nodejs를 위한 AWS SDK 수업을 먼저 들어야 합니다.
권한
본 수업을 진행하기 위해서는 사용자나 역할이 AmazonS3FullAccess 권한이 있어야 합니다. iam을 이용해주세요.
API 사용법
업로드
s3_put.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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
1 2 3 4 5 6 7 8 9 10 11 | 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
1 2 3 4 5 6 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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' ); }) |