더북(TheBook)

JSON 키 파일을 프로젝트로 복사했다면, 이제 콘솔을 실행해 NodeBird 프로젝트로 이동한 후 multer에서 클라우드 스토리지로 이미지를 업로드할 수 있게 해주는 multer-google-storage 패키지를 설치합니다.

Warning 과금 요소

클라우드 스토리지를 사용하면 데이터를 저장할 때와 저장된 데이터를 로드할 때 과금됩니다. 초반에는 GCP에서 제공하는 300달러 크레딧을 사용하므로 과금되지 않습니다. 하지만 1년이 지나거나 300달러를 모두 소진하면 과금되기 시작하므로 이 예제를 실습한 후에는 반드시 버킷 안의 데이터를 지우길 바랍니다.

콘솔

$ npm i multer-google-storage

multer-google-storage를 사용하도록 routes/post.js와 controllers/post.js를 수정합니다.

nodebird/routes/post.js

const express = require('express');
const multer = require('multer');
const fs = require('fs');
const multerGoogleStorage = require('multer-google-storage');

const { afterUploadImage, uploadPost } = require('../controllers/post');
const { isLoggedIn } = require('../middlewares');

const router = express.Router();

try {
  fs.readdirSync('uploads');
} catch (error) {
  console.error('uploads 폴더가 없어 uploads 폴더를 생성합니다.');
  fs.mkdirSync('uploads');
}

const upload = multer({
  storage: multerGoogleStorage.storageEngine({
    bucket: 'nodebird3',
    projectId: 'node-deploy-358509',
    keyFilename: 'node-deploy-358509-a2917cd5849c.json',
    filename: (req, file, cb) => {
      cb(null, `original/${Date.now()}_${file.originalname}`);
    },
  }),
  limits: { fileSize: 5 * 1024 * 1024 },
});
...

nodebird/controllers/post.js

const { Post, Hashtag } = require('../models');

exports.afterUploadImage = (req, res) => {
  console.log(req.file);
  res.json({ url: req.file.path });
};
...
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.