v1.18.x
barisusakli 9 years ago
parent 8b1d324bd1
commit 4aac8bbe6a

@ -1,11 +1,11 @@
'use strict'; 'use strict';
var fs = require('fs'), var fs = require('fs');
Jimp = require('jimp'), var Jimp = require('jimp');
async = require('async'), var async = require('async');
plugins = require('./plugins'); var plugins = require('./plugins');
var image = {}; var image = module.exports;
image.resizeImage = function(data, callback) { image.resizeImage = function(data, callback) {
if (plugins.hasListeners('filter:image.resize')) { if (plugins.hasListeners('filter:image.resize')) {
@ -106,12 +106,10 @@ image.size = function(path, callback) {
callback(err, data ? data.bitmap : null); callback(err, data ? data.bitmap : null);
}); });
} }
} };
image.convertImageToBase64 = function(path, callback) { image.convertImageToBase64 = function(path, callback) {
fs.readFile(path, function(err, data) { fs.readFile(path, function(err, data) {
callback(err, data ? data.toString('base64') : null); callback(err, data ? data.toString('base64') : null);
}); });
}; };
module.exports = image;

@ -1,12 +1,12 @@
"use strict"; "use strict";
var express = require('express'), var express = require('express');
nconf = require('nconf'), var nconf = require('nconf');
winston = require('winston'), var winston = require('winston');
user = require('./../user'), var user = require('./../user');
categories = require('./../categories'), var categories = require('./../categories');
topics = require('./../topics'), var topics = require('./../topics');
posts = require('./../posts'); var posts = require('./../posts');
module.exports = function(app, middleware, controllers) { module.exports = function(app, middleware, controllers) {
var router = express.Router(); var router = express.Router();

@ -14,7 +14,6 @@ var social = require('./social');
(function(Topics) { (function(Topics) {
require('./topics/data')(Topics); require('./topics/data')(Topics);
require('./topics/create')(Topics); require('./topics/create')(Topics);
require('./topics/delete')(Topics); require('./topics/delete')(Topics);
@ -29,6 +28,7 @@ var social = require('./social');
require('./topics/teaser')(Topics); require('./topics/teaser')(Topics);
require('./topics/suggested')(Topics); require('./topics/suggested')(Topics);
require('./topics/tools')(Topics); require('./topics/tools')(Topics);
require('./topics/thumb')(Topics);
Topics.exists = function(tid, callback) { Topics.exists = function(tid, callback) {
db.isSortedSetMember('topics:tid', tid, callback); db.isSortedSetMember('topics:tid', tid, callback);

@ -21,6 +21,9 @@ module.exports = function(Topics) {
var topicData; var topicData;
async.waterfall([ async.waterfall([
function(next) {
Topics.resizeAndUploadThumb(data, next);
},
function(next) { function(next) {
db.incrObjectField('global', 'nextTid', next); db.incrObjectField('global', 'nextTid', next);
}, },

@ -0,0 +1,91 @@
'use strict';
var async = require('async');
var nconf = require('nconf');
var winston = require('winston');
var path = require('path');
var fs = require('fs');
var request = require('request');
var mime = require('mime');
var validator = require('validator');
var meta = require('../meta');
var image = require('../image');
var file = require('../file');
var plugins = require('../plugins');
module.exports = function(Topics) {
Topics.resizeAndUploadThumb = function(data, callback) {
if (!data.thumb || !validator.isURL(data.thumb)) {
return callback();
}
var pathToUpload;
var filename;
async.waterfall([
function(next) {
request.head(data.thumb, next);
},
function(res, body, next) {
var type = res.headers['content-type'];
if (!type.match(/image./)) {
return next(new Error('[[error:invalid-file]]'));
}
var extension = path.extname(data.thumb);
if (!extension) {
extension = '.' + mime.extension(type);
}
filename = Date.now() + '-topic-thumb' + extension;
pathToUpload = path.join(nconf.get('base_dir'), nconf.get('upload_path'), 'files', filename);
request(data.thumb).pipe(fs.createWriteStream(pathToUpload)).on('close', next);
},
function(next) {
file.isFileTypeAllowed(pathToUpload, next);
},
function(next) {
var size = parseInt(meta.config.topicThumbSize, 10) || 120;
image.resizeImage({
path: pathToUpload,
extension: path.extname(pathToUpload),
width: size,
height: size
}, next);
},
function(next) {
if (!plugins.hasListeners('filter:uploadImage')) {
data.thumb = path.join(nconf.get('upload_url'), 'files', filename);
return callback();
}
plugins.fireHook('filter:uploadImage', {image: {path: pathToUpload, name: ''}, uid: data.uid}, next);
},
function(uploadedFile, next) {
deleteFile(pathToUpload);
data.thumb = uploadedFile.url;
next();
}
], function(err) {
if (err) {
deleteFile(pathToUpload);
}
callback(err);
});
};
function deleteFile(path) {
if (path) {
fs.unlink(path, function(err) {
if (err) {
winston.error(err);
}
});
}
}
};
Loading…
Cancel
Save