express4 でファイルアップロード
の続編です。
ファイルを受け取れたので、そのファイルをリサイズしてMySQLまで保存したいと思います。
Version
- node v8.2.1
- express 4.15.0
今回使うnode.jsのライブラリ
-
Knex.js - A SQL Query Builder for Javascript
MySQLとお話しする部分に使います。 -
aheckmann/gm: GraphicsMagick for node
画像のリサイズなどに使います。
事前に、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));