Amazon Web Services

Nodejs를 위한 S3 SDK

본 수업에서는 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 시리즈를 보실 것을 권합니다. 

  1. http://nodeqa.com/nodejs_ref/22
  2. http://nodeqa.com/nodejs_ref/23
  3. http://nodeqa.com/nodejs_ref/27

목록

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');
})

 

댓글

댓글 본문
작성자
비밀번호
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기