Node.js
Express.js

express4でファイルアップロード、画像リサイズ、MySQLへ保存まで

express4 でファイルアップロード
の続編です。

ファイルを受け取れたので、そのファイルをリサイズしてMySQLまで保存したいと思います。

Version

  • node v8.2.1
  • express 4.15.0

今回使うnode.jsのライブラリ

事前に、graphicsmagickをインストールする必要があります。

apt-get install graphicsmagick

アップロード画像をリサイズしてそのまま保存

リサイズとか、品質の変更とか、プロファイルデータを削除して別名で保存

const multer = require('multer');
const upload = multer({
  dest: 'uploads/tmp'
})

router.post('/user_photo', upload.any(), (req, res, next) => {

  gm(req.files[0].path)
    .resize(300)
    .quality(70)
    .noProfile()
    .write('uploads/reformat.png', function (err) {
      if (err) {
        logger.debug(err);
      } else {
        logger.debug('done');
      }
    });
  res.status(200).end('ok');
});

アップロード画像をMySQLに保存

  • toBufferを使うのがコツ
  • イメージファイルが大きいと、blobでは入らないので、mediumblobかlongblobにすること
const multer = require('multer');
const upload = multer({
  dest: 'uploads/tmp'
})
const gm = require('gm');
const fs = require('fs');


router.post('/user_photo', upload.any(), (req, res, next) => {

  gm(req.files[0].path)
    .resize(300)
    .toBuffer( (err, buffer) => {
      if(err){
        logger.debug(err);
      }
      knex('image').insert({
        image: buffer,
        fileType: "png"
      }).then(function(){
        logger.debug('ok');
      }).catch(function(err){
        logger.debug(err);
      });
    });
  res.status(200).end('ok');
});

create table image (image longblob, filetype char(10));