diff --git a/core/server/web/shared/middlewares/image/handle-image-sizes.js b/core/server/web/shared/middlewares/image/handle-image-sizes.js index 0251669809..f3bfb9cd8b 100644 --- a/core/server/web/shared/middlewares/image/handle-image-sizes.js +++ b/core/server/web/shared/middlewares/image/handle-image-sizes.js @@ -53,9 +53,27 @@ module.exports = function (req, res, next) { return; } - const originalImagePath = path.relative(sizeImageDir, req.url); + const imagePath = path.relative(sizeImageDir, req.url); + const {dir, name, ext} = path.parse(imagePath); + const [imageNameMatched, imageName, imageNumber] = name.match(/^(.+?)(-\d+)?$/) || [null]; - return storageInstance.read({path: originalImagePath}) + if (!imageNameMatched) { + // CASE: Image name does not contain any characters? + // RESULT: Hand off to `next()` which will 404 + return; + } + const unoptimizedImagePath = path.join(dir, `${imageName}_o${imageNumber || ''}${ext}`); + + return storageInstance.exists(unoptimizedImagePath) + .then((unoptimizedImageExists) => { + if (unoptimizedImageExists) { + return unoptimizedImagePath; + } + return imagePath; + }) + .then((path) => { + return storageInstance.read({path}); + }) .then((originalImageBuffer) => { return image.manipulator.resizeImage(originalImageBuffer, imageDimensionConfig); })