Posted at

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

More than 1 year has passed since last update.

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