Ghost/ghost/core/test/utils/fixtures
Simon Backx 8e66edee2b
🐛 Fixed storing original files for images (#16117)
fixes https://github.com/TryGhost/Team/issues/481

This change fixes an issue when multiple images with the same name are
uploaded in parallel. The current system does not guarantee that the
original filename is stored under NAME+`_o`, because the upload for the
original file and the resized file are happening in parallel.

Solution:
- Wait for the storage of the resized image (= the image without the _o
suffix) before storing the original file.
- When that is stored, use the generated file name of the stored image
to generate the filename with the _o suffix. This way, it will always
match and we don't risk both files to have a different number suffix.
We'll also set the `targetDir` argument when saving the file, to avoid
storing the original file in a different directory (when uploading a
file around midnight both files could be stored in 2023/01 and 2023/02).

Some extra optimisations needed with this fix:
- Previously when uploading image.jpg, while it already exists, it would
store two filenames on e.g., `image-3.jpg` and `image_o-3.jpg`. Note the
weird positioning of `_o`. This probably caused bugs when uploading
files named `image-3.jpg`, which would store the original in
`image-3_o.jpg`, but this original would never be used by the
handle-image-sizes middleware (it would look for `image_o-3.jpg`). This
fix would solve this weird naming issue, and make it more consistent.
But we need to make sure our middlewares (including handle-image-sizes)
will be able to handle both file locations to remain compatible with the
old format. This isn't additional work, because it would fix the old bug
too.
- Prevent uploading files that end with `_o`, e.g. by automatically
stripping that suffix from uploaded files. To prevent collisions.

Advantage(s):
- We keep the original file name, which is better for SEO.
- No changes required to the storage adapters.

Downside(s):
- The storage of both files will nog happen parallel any longer. But I
expect the performance implications to be minimal.
- Changes to the routing: normalize middleware is removed
2023-01-30 16:40:50 +01:00
..
admin-build 🐛 Fixed missing published Admin assets when running in development 2022-08-04 10:55:35 +02:00
config Converted Ghost repo into a monorepo 2022-07-20 16:41:05 +02:00
csv 🐛 Fixed invalid email getting saved for members (#16021) 2022-12-16 16:47:52 +05:30
data Converted Ghost repo into a monorepo 2022-07-20 16:41:05 +02:00
export Converted Ghost repo into a monorepo 2022-07-20 16:41:05 +02:00
filter-param Fixed import of bson-objectid in accordance to the typings 2022-10-12 14:54:35 +07:00
images 🐛 Fixed storing original files for images (#16117) 2023-01-30 16:40:50 +01:00
import Converted Ghost repo into a monorepo 2022-07-20 16:41:05 +02:00
media Converted Ghost repo into a monorepo 2022-07-20 16:41:05 +02:00
settings 🐛 Fixed sitemaps with no content (#15571) 2022-10-12 14:11:19 +01:00
themes Fixed the typo 2022-08-04 15:38:32 +01:00
urls Converted Ghost repo into a monorepo 2022-07-20 16:41:05 +02:00
cache-rules.js Enabled shared caching of 404 error responses 2022-09-26 14:54:50 +08:00
context.js Converted Ghost repo into a monorepo 2022-07-20 16:41:05 +02:00
data-generator.js added mentions admin browse api e2e tests (#16177) 2023-01-30 07:59:00 -06:00
default-settings-browser.json Added outbound link tagging setting (#16146) 2023-01-20 13:41:36 +01:00
default-settings.json Added outbound link tagging setting (#16146) 2023-01-20 13:41:36 +01:00
fixtures.json Added visible theme errors in admin (#16081) 2023-01-06 13:44:27 +01:00
test.hbs Converted Ghost repo into a monorepo 2022-07-20 16:41:05 +02:00