-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #771 from SISheogorath/refactor/imageRouter
Refactoring imageRouter to modularity
- Loading branch information
Showing
7 changed files
with
190 additions
and
132 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
'use strict' | ||
const url = require('url') | ||
|
||
const config = require('../../config') | ||
|
||
exports.uploadImage = function (imagePath, callback) { | ||
if (!imagePath || typeof imagePath !== 'string') { | ||
callback(new Error('Image path is missing or wrong'), null) | ||
return | ||
} | ||
|
||
if (!callback || typeof callback !== 'function') { | ||
callback(new Error('Callback has to be a function'), null) | ||
return | ||
} | ||
|
||
callback(null, url.resolve(config.serverurl + '/', imagePath.match(/^public\/(.+$)/)[1])) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
'use strict' | ||
const config = require('../../config') | ||
const logger = require('../../logger') | ||
|
||
const imgur = require('imgur') | ||
|
||
exports.uploadImage = function (imagePath, callback) { | ||
if (!imagePath || typeof imagePath !== 'string') { | ||
callback(new Error('Image path is missing or wrong'), null) | ||
return | ||
} | ||
|
||
if (!callback || typeof callback !== 'function') { | ||
callback(new Error('Callback has to be a function'), null) | ||
return | ||
} | ||
|
||
imgur.setClientId(config.imgur.clientID) | ||
imgur.uploadFile(imagePath) | ||
.then(function (json) { | ||
if (config.debug) { | ||
logger.info('SERVER uploadimage success: ' + JSON.stringify(json)) | ||
} | ||
callback(null, json.data.link.replace(/^http:\/\//i, 'https://')) | ||
}).catch(function (err) { | ||
callback(new Error(err), null) | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
'use strict' | ||
|
||
const Router = require('express').Router | ||
const formidable = require('formidable') | ||
|
||
const config = require('../../config') | ||
const logger = require('../../logger') | ||
const response = require('../../response') | ||
|
||
const imageRouter = module.exports = Router() | ||
|
||
// upload image | ||
imageRouter.post('/uploadimage', function (req, res) { | ||
var form = new formidable.IncomingForm() | ||
|
||
form.keepExtensions = true | ||
|
||
if (config.imageuploadtype === 'filesystem') { | ||
form.uploadDir = 'public/uploads' | ||
} | ||
|
||
form.parse(req, function (err, fields, files) { | ||
if (err || !files.image || !files.image.path) { | ||
response.errorForbidden(res) | ||
} else { | ||
if (config.debug) { | ||
logger.info('SERVER received uploadimage: ' + JSON.stringify(files.image)) | ||
} | ||
|
||
const uploadProvider = require('./' + config.imageuploadtype) | ||
uploadProvider.uploadImage(files.image.path, function (err, url) { | ||
if (err !== null) { | ||
logger.error(err) | ||
return res.status(500).end('upload image error') | ||
} | ||
res.send({ | ||
link: url | ||
}) | ||
}) | ||
} | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
'use strict' | ||
const fs = require('fs') | ||
const path = require('path') | ||
|
||
const config = require('../../config') | ||
const {getImageMimeType} = require('../../utils') | ||
|
||
const Minio = require('minio') | ||
const minioClient = new Minio.Client({ | ||
endPoint: config.minio.endPoint, | ||
port: config.minio.port, | ||
secure: config.minio.secure, | ||
accessKey: config.minio.accessKey, | ||
secretKey: config.minio.secretKey | ||
}) | ||
|
||
exports.uploadImage = function (imagePath, callback) { | ||
if (!imagePath || typeof imagePath !== 'string') { | ||
callback(new Error('Image path is missing or wrong'), null) | ||
return | ||
} | ||
|
||
if (!callback || typeof callback !== 'function') { | ||
callback(new Error('Callback has to be a function'), null) | ||
return | ||
} | ||
|
||
fs.readFile(imagePath, function (err, buffer) { | ||
if (err) { | ||
callback(new Error(err), null) | ||
return | ||
} | ||
|
||
let key = path.join('uploads', path.basename(imagePath)) | ||
let protocol = config.minio.secure ? 'https' : 'http' | ||
|
||
minioClient.putObject(config.s3bucket, key, buffer, buffer.size, getImageMimeType(imagePath), function (err, data) { | ||
if (err) { | ||
callback(new Error(err), null) | ||
return | ||
} | ||
callback(null, `${protocol}://${config.minio.endPoint}:${config.minio.port}/${config.s3bucket}/${key}`) | ||
}) | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
'use strict' | ||
const fs = require('fs') | ||
const path = require('path') | ||
|
||
const config = require('../../config') | ||
const {getImageMimeType} = require('../../utils') | ||
|
||
const AWS = require('aws-sdk') | ||
const awsConfig = new AWS.Config(config.s3) | ||
const s3 = new AWS.S3(awsConfig) | ||
|
||
exports.uploadImage = function (imagePath, callback) { | ||
if (!imagePath || typeof imagePath !== 'string') { | ||
callback(new Error('Image path is missing or wrong'), null) | ||
return | ||
} | ||
|
||
if (!callback || typeof callback !== 'function') { | ||
callback(new Error('Callback has to be a function'), null) | ||
return | ||
} | ||
|
||
fs.readFile(imagePath, function (err, buffer) { | ||
if (err) { | ||
callback(new Error(err), null) | ||
return | ||
} | ||
let params = { | ||
Bucket: config.s3bucket, | ||
Key: path.join('uploads', path.basename(imagePath)), | ||
Body: buffer | ||
} | ||
|
||
const mimeType = getImageMimeType(imagePath) | ||
if (mimeType) { params.ContentType = mimeType } | ||
|
||
s3.putObject(params, function (err, data) { | ||
if (err) { | ||
callback(new Error(err), null) | ||
return | ||
} | ||
|
||
let s3Endpoint = 's3.amazonaws.com' | ||
if (config.s3.region && config.s3.region !== 'us-east-1') { | ||
s3Endpoint = `s3-${config.s3.region}.amazonaws.com` | ||
} | ||
callback(null, `https://${s3Endpoint}/${config.s3bucket}/${params.Key}`) | ||
}) | ||
}) | ||
} |