From 2c780f53df73a0ba1f13109213d95df7f32cbd8a Mon Sep 17 00:00:00 2001 From: Marc Deop Date: Wed, 30 Aug 2017 18:58:34 +0200 Subject: [PATCH] Add support for minio --- lib/config/default.js | 7 +++++++ lib/config/environment.js | 7 +++++++ lib/web/imageRouter.js | 34 ++++++++++++++++++++++++++++++++++ package.json | 1 + 4 files changed, 49 insertions(+) diff --git a/lib/config/default.js b/lib/config/default.js index a14a429..a968997 100644 --- a/lib/config/default.js +++ b/lib/config/default.js @@ -48,6 +48,13 @@ module.exports = { secretAccessKey: undefined, region: undefined }, + minio: { + accessKey: undefined, + secretKey: undefined, + endPoint: undefined, + secure: true, + port: 9000 + }, s3bucket: undefined, // authentication facebook: { diff --git a/lib/config/environment.js b/lib/config/environment.js index 75381ff..49e44ca 100644 --- a/lib/config/environment.js +++ b/lib/config/environment.js @@ -24,6 +24,13 @@ module.exports = { secretAccessKey: process.env.HMD_S3_SECRET_ACCESS_KEY, region: process.env.HMD_S3_REGION }, + minio: { + accessKey: process.env.HMD_MINIO_ACCESS_KEY, + secretKey: process.env.HMD_MINIO_SECRET_KEY, + endPoint: process.env.HMD_MINIO_ENDPOINT, + secure: toBooleanConfig(process.env.HMD_MINIO_SECURE), + port: parseInt(process.env.HMD_MINIO_PORT) + }, s3bucket: process.env.HMD_S3_BUCKET, facebook: { clientID: process.env.HMD_FACEBOOK_CLIENTID, diff --git a/lib/web/imageRouter.js b/lib/web/imageRouter.js index bebab30..b17cccb 100644 --- a/lib/web/imageRouter.js +++ b/lib/web/imageRouter.js @@ -73,6 +73,40 @@ imageRouter.post('/uploadimage', function (req, res) { }) }) break + + case 'minio': + var utils = require('../utils') + var Minio = require('minio') + var minioClient = new Minio.Client({ + endPoint: config.minio.endPoint, + port: config.minio.port, + secure: config.minio.secure, + accessKey: config.minio.accessKey, + secretKey: config.minio.secretKey + }) + fs.readFile(files.image.path, function (err, buffer) { + if (err) { + logger.error(err) + res.status(500).end('upload image error') + return + } + + var key = path.join('uploads', path.basename(files.image.path)) + var protocol = config.minio.secure ? 'https' : 'http' + + minioClient.putObject(config.s3bucket, key, buffer, buffer.size, utils.getImageMimeType(files.image.path), function (err, data) { + if (err) { + logger.error(err) + res.status(500).end('upload image error') + return + } + res.send({ + link: `${protocol}://${config.minio.endPoint}:${config.minio.port}/${config.s3bucket}/${key}` + }) + }) + }) + break + case 'imgur': default: imgur.setClientId(config.imgur.clientID) diff --git a/package.json b/package.json index b0f1ae1..eb09e10 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,7 @@ "mermaid": "~7.0.0", "meta-marked": "^0.4.2", "method-override": "^2.3.7", + "minio": "^3.1.3", "moment": "^2.17.1", "morgan": "^1.7.0", "mysql": "^2.12.0",