Personally, I suggest to use Google Firebases Cloud Storage.
You could give them access to the firebase console directly, with a specific role, where they can upload images.
Users can set fixed metadata or custom metadata, see docs for more info.
They can delete content, but I don't think they might set objects as private. I know than you can set a scope or access control list, so non-logged users cannot see the object (an end-side user is a non-auth user).
You can use the set of firebase API's to query the cloud storage, more info here.
The service has a per-usage cost, so it increases with your usage. I think you have a limit of free usage per month.
Thanks! I will look into Firebase.
The project will be deployed to Netlify so any additional integration to that platform as well is welcome.
I think firebase is ok for Netlify, is totally platform-independent
If it is just images you are looking into I have been pretty happy with Cloudinary. It seems to fit your bullet list requirements and has a ton of great image optimization features.
This looks good as well. They even maintain their own Vue library which is a big plus.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.