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