I’ll second @bluray’s use of S3, and add to it cloudfront, so you can secure access based on cookies.
Our approach differs slightly, we use slingshot for direct S3 upload, lambda to generate thumbnails (though we could do this client side too).
We don’t have an “images collection”, instead we store an imageKeys object on any entity (about 15 different entity type) that has an image, this tracks the original and any thumbnail versions, then we have a helper that takes an imageKeys object and returns either the URL for the requested size, or the URL for the original if the requested size isn’t available.
We originally used an images collection for this (based on MeteorFiles) but found it unnecessarily messy