We store the files generated by our users on a service with an S3 compatible API. We use AWS S3 in production and Minio in development. This makes it possible to run multiple instances of each service that LEGO requires to be fully functional.
Applications interacting with lego does a direct upload of the files to the file backend, this saves us from handling storing and reading of files in python. Each time a user wants access to a file, permissions are validates and a link to the object with a short TTL are returned to the user.
Resizing of images are performed by a service called Thumbor. We made this decision because Thumbor is easy to implement into our system and has a integration with S3 like apis.