mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-13 06:34:39 -04:00
Merge pull request #248 from hackmdio/file-upload-options
Support other options for image uploading
This commit is contained in:
commit
bd3d4958e4
14 changed files with 205 additions and 20 deletions
105
app.js
105
app.js
|
@ -406,33 +406,102 @@ app.get('/me', function (req, res) {
|
|||
});
|
||||
}
|
||||
});
|
||||
//upload to imgur
|
||||
|
||||
//upload image
|
||||
app.post('/uploadimage', function (req, res) {
|
||||
var form = new formidable.IncomingForm();
|
||||
|
||||
form.keepExtensions = true;
|
||||
|
||||
if (config.imageUploadType === 'filesystem') {
|
||||
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));
|
||||
imgur.setClientId(config.imgur.clientID);
|
||||
try {
|
||||
imgur.uploadFile(files.image.path)
|
||||
.then(function (json) {
|
||||
if (config.debug)
|
||||
logger.info('SERVER uploadimage success: ' + JSON.stringify(json));
|
||||
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: json.data.link.replace(/^http:\/\//i, 'https://')
|
||||
link: path.join(config.serverurl, files.image.path.match(/^public(.+$)/)[1])
|
||||
});
|
||||
})
|
||||
.catch(function (err) {
|
||||
logger.error(err);
|
||||
return res.status(500).end('upload image error');
|
||||
});
|
||||
} catch (err) {
|
||||
|
||||
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}`
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
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');
|
||||
}
|
||||
return res.status(500).end('process image error');
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue