always thumbnail animated images to prevent large filesize by small dimension gifs not being thumbnailed

merge-requests/208/head
fatchan 5 years ago
parent a56b9b9fad
commit 476cf5c2a9
  1. 5
      helpers/files/file-check-mime-types.js
  2. 6
      models/forms/make-post.js
  3. 2
      models/forms/uploadbanners.js

@ -5,6 +5,9 @@ const imageMimeTypes = new Set([
'image/pjpeg',
'image/png',
'image/bmp',
]);
const animatedImageMimeTypes = new Set([
'image/gif',
'image/webp',
]);
@ -16,6 +19,6 @@ const videoMimeTypes = new Set([
module.exports = (mimetype, options) => {
return (options.video && videoMimeTypes.has(mimetype)) || (options.image && imageMimeTypes.has(mimetype));
return (options.video && videoMimeTypes.has(mimetype)) || (options.image && imageMimeTypes.has(mimetype) || options.animatedImage && animatedImageMimeTypes.has(mimetype));
};

@ -77,7 +77,7 @@ module.exports = async (req, res, next, numFiles) => {
if (numFiles > 0) {
// check all mime types befoer we try saving anything
for (let i = 0; i < numFiles; i++) {
if (!fileCheckMimeType(req.files.file[i].mimetype, {image: true, video: true})) {
if (!fileCheckMimeType(req.files.file[i].mimetype, {animatedImage: true, image: true, video: true})) {
return res.status(400).render('message', {
'title': 'Bad request',
'message': `Invalid file type for ${req.files.file[i].name}. Mimetype ${req.files.file[i].mimetype} not allowed.`,
@ -109,7 +109,9 @@ module.exports = async (req, res, next, numFiles) => {
processedFile.geometry = imageData.size // object with width and height pixels
processedFile.sizeString = formatSize(processedFile.size) // 123 Ki string
processedFile.geometryString = imageData.Geometry // 123 x 123 string
if (processedFile.geometry.height <= 128 && processedFile.geometry.width <= 128) {
if (fileCheckMimeType(file.mimetype, {image: true}) //always thumbnail gif/webp
&& processedFile.geometry.height <= 128
&& processedFile.geometry.width <= 128) {
processedFile.hasThumb = false;
} else {
processedFile.hasThumb = true;

@ -16,7 +16,7 @@ module.exports = async (req, res, next, numFiles) => {
// check all mime types befoer we try saving anything
for (let i = 0; i < numFiles; i++) {
if (!fileCheckMimeType(req.files.file[i].mimetype, {image: true, video: false})) {
if (!fileCheckMimeType(req.files.file[i].mimetype, {image: true, animatedImage: true, video: false})) {
return res.status(400).render('message', {
'title': 'Bad request',
'message': `Invalid file type for ${req.files.file[i].name}. Mimetype ${req.files.file[i].mimetype} not allowed.`,

Loading…
Cancel
Save