【Express】 S3に画像をアップロード

9438 ワード

S3に画像をアップロードします。
本記事ではアップロードのみで、読み取りは行いません。

routes/images.js
require('dotenv').config();
const fs = require('fs');
const aws = require('aws-sdk');
const s3 = new aws.S3({  // dotenvで読み込む
  accessKeyId: process.env.accessKeyId,
  secretAccessKey: process.env.secretAccessKey,
  region: process.env.region,
});

const multer  = require('multer');
const multerS3 = require('multer-s3');

// multer-s3の公式を参照(下記)
const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'node-image-app2',
    metadata: function (req, file, cb) {
      cb(null, {fieldName: file.fieldname});
    },
    key: function (req, file, cb) {
      cb(null, Date.now().toString())
    }
  })
});

// Create images
// upload(...)で画像を登録。multer公式参照(下記)
router.post('/images/upload', upload.single('image'), (req, res, next) => {
  if (req.file) {
    console.log('Image uploaded!');
    res.redirect('/images');
  }
  else {
    console.log('Image can not uploaded!')
    res.render('image.ejs');
  }
})
accessKeyId='foo'
secretAccessKey='foo'
region='foo'

.envファイルを .gitignoreに必ず追加します。

参考
multer
multer-s3