HyeGyeong
HyeGyeong 프로그래머를 꿈꾸며 JavaScript 공부 중

S3로 file upload

S3로 file upload

Sequelize join table setting

  • Get /api/user 에서 user table 외에 interest, pictures table join해서 보여줌.
1
2
3
4
5
6
7
8
9
10
11
// GET /api/users
app.get('/api/users', (req, res) =>
  User.findAll({
    include: [{ model: Interest }, { model: Picture }]
  })
    .then(users => {
      res.json(users);
      res.end();
    })
    .catch(err => console.log('Error: ', err))
);

오늘도 RDS 문제 터짐.

  • config folder는 숨겨야 하는 폴더인데 .gitignore에 추가 안 함. 즉, secret key들을 모두 github에 공개하고 있었다는 얘기…. 앞으로 작업할 때 꼭 체크 할 것!

  • 기존 config 폴더에 있던 secret key를 수정했는데 RDS가 연결되지 않음. 역시나 localhost에서는 원하는 대로 잘 불려짐. 보안 그룹 문제.

  • 보안 그룹 재설정, 포트번호, 비밀번호, 주소 등 싹 고치고 나니 다시 잘 돌아가는 중

S3 Connect

  • ‘aws-sdk’, ‘multer’, ‘multerS3’ module 이용해서 연결
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
// aws s3 connect
let AWS = require('aws-sdk');
AWS.config.loadFromPath( // 파일 루트 설정한 후 확인 필수!
  path.join(__dirname, '..', '/server/config', 'awsconfig.json')
);
let s3 = new AWS.S3();
let multer = require('multer');
let multerS3 = require('multer-s3'); // s3 file upload를 도와줌.
let upload = multer({ // multer setting
  storage: multerS3({
    s3: s3,
    bucket: 'hoa-hoa-project',
    key: (req, file, cb) => {
      let extension = path.extname(file.originalname);
      cb(null, Date.now().toString() + extension);
    },
    acl: 'public-read-write'
  }),
  limits: { fileSize: 5 * 1024 * 1024 } // 올릴 수 있는 사이즈 제한
});

// upload type setting
let type = upload.single('file');
app.post('/api/upload', type, (req, res, next) => {
  let imgFile = req.file;
  res.json(imgFile);
});

// if status(200)
{
    "fieldname": "file",
    "originalname": "file.gif",
    "encoding": "7bit",
    "mimetype": "image/gif",
    "size": 147645,
    "bucket": "Your bucket name",
    "key": "changed file name",
    "acl": "public-read-write",
    "contentType": "application/octet-stream",
    "contentDisposition": null,
    "storageClass": "STANDARD",
    "serverSideEncryption": null,
    "metadata": null,
    "location": "Your S3 address/changed file name",
    "etag": "\"암호화된 코드\""
}