summaryrefslogtreecommitdiff
path: root/app.js
diff options
context:
space:
mode:
authorYukai Huang2016-11-16 17:07:00 +0800
committerYukai Huang2016-11-16 17:07:00 +0800
commit2279986f97520efccb8f68a9e9f8535cd4eb3bf2 (patch)
treea6545b7e0b265b76784106c741a5b374489d8c55 /app.js
parent1f409197c350f04caf878d0e8926d5edd882f4f5 (diff)
Config sharp image preprocessing
Diffstat (limited to 'app.js')
-rw-r--r--app.js122
1 files changed, 69 insertions, 53 deletions
diff --git a/app.js b/app.js
index 7cb33a1d..1c1120d0 100644
--- a/app.js
+++ b/app.js
@@ -413,71 +413,87 @@ app.post('/uploadimage', function (req, res) {
form.uploadDir = "public/uploads";
}
+ function preprocessImage(path) {
+ return new Promise((resolve) => {
+ var oldFile = `${path}-old`;
+ fs.rename(path, oldFile, function() {
+ var sharp = require('sharp');
+ sharp(oldFile).toFile(path).then(() => {
+ fs.unlink(oldFile, function() {
+ resolve(path);
+ })
+ });
+ });
+ });
+ }
+
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));
-
- var path = require('path');
- try {
- switch (config.imageUploadType) {
- case 'filesystem':
- res.send({
- link: path.join(config.serverurl, files.image.path.match(/^public(.+$)/)[1])
- });
+ preprocessImage(files.image.path).then(() => {
+ if (config.debug)
+ logger.info('SERVER received uploadimage: ' + JSON.stringify(files.image));
+
+ var path = require('path');
+ try {
+ switch (config.imageUploadType) {
+ case 'filesystem':
+ res.send({
+ link: path.join(config.serverurl, files.image.path.match(/^public(.+$)/)[1])
+ });
- break;
+ break;
+
+ case 's3':
+ var AWS = require('aws-sdk');
+ var awsConfig = new AWS.Config(config.s3);
+ var s3 = new AWS.S3(awsConfig);
+
+ fs.readFile(files.image.path, function (err, buffer) {
+ var params = {
+ Bucket: 'hackmd',
+ Key: path.join('uploads', path.basename(files.image.path)),
+ Body: buffer
+ };
+
+ s3.putObject(params, function (err, data) {
+ if (err) {
+ logger.error(err);
+ res.status(500).end('upload image error');
+ } else {
+ res.send({
+ link: `https://s3-${config.s3.region}.amazonaws.com/${config.s3bucket}/${params.Key}`
+ });
+ }
+ });
- case 's3':
- var AWS = require('aws-sdk');
- var awsConfig = new AWS.Config(config.s3);
- var s3 = new AWS.S3(awsConfig);
+ });
- fs.readFile(files.image.path, function (err, buffer) {
- var params = {
- Bucket: 'hackmd',
- Key: path.join('uploads', path.basename(files.image.path)),
- Body: buffer
- };
+ break;
- s3.putObject(params, function (err, data) {
- if (err) {
- logger.error(err);
- res.status(500).end('upload image error');
- } else {
+ case 'imgur':
+ default:
+ imgur.setClientId(config.imgur.clientID);
+ imgur.uploadFile(files.image.path)
+ .then(function (json) {
+ if (config.debug)
+ logger.info('SERVER uploadimage success: ' + JSON.stringify(json));
res.send({
- link: `https://s3-${config.s3.region}.amazonaws.com/${config.s3bucket}/${params.Key}`
+ link: json.data.link.replace(/^http:\/\//i, 'https://')
});
- }
- });
-
- });
-
- break;
-
- case 'imgur':
- default:
- imgur.setClientId(config.imgur.clientID);
- imgur.uploadFile(files.image.path)
- .then(function (json) {
- if (config.debug)
- logger.info('SERVER uploadimage success: ' + JSON.stringify(json));
- res.send({
- link: json.data.link.replace(/^http:\/\//i, 'https://')
+ })
+ .catch(function (err) {
+ logger.error(err);
+ return res.status(500).end('upload image error');
});
- })
- .catch(function (err) {
- logger.error(err);
- return res.status(500).end('upload image error');
- });
- break;
+ break;
+ }
+ } catch (err) {
+ logger.error(err);
+ return res.status(500).end('upload image error');
}
- } catch (err) {
- logger.error(err);
- return res.status(500).end('upload image error');
- }
+ });
}
});
});