LoginSignup
7
5

More than 5 years have passed since last update.

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

Posted at

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));
7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5