Depending on how many simultaneous users you want the application to be able to serve at any given time (peak), and how much processing your application does when uploading and downloading files (as well as other typically used operations), your hosting specification requirements may vary.
But, to offer some basic guidance, you could probably get started with about 3 Virtual Machines (2 for load balancing serving the web application itself, and one running the database). I'd get them with around 4GB ram and 2 CPU cores each. These run at around $40/month each on Digital Ocean. You could also use AWS, SoftLayer, Heroku, and others, each with their own pros and cons. For example, if you use AWS you could (depending on which database you're using) leverage RDS for your database which could simplify your scaling and operations. I'd suggest you store the uploaded files on S3, Object Storage, or similar service (as opposite to serving it from the file system which makes it harder to scale).
Hope this helps as a quick guidance. As you can see there's lots of options and details to consider. If you'd like to setup a call, I can certainly help you dig deeper into the different options and which ones would work best for your specific needs.
The two option I would look into are using a gem called Paperclip, which provides the tools for uploads, url generation, and attachments as model attributes with any number of storage options, and using a service like Cloudinary. Cloudinary does the same things as paperclip, but is the hosting service for the uploads as well, which with images means they can do a bunch of cool stuff like color, size, and shape transformation on the fly. Cloudinary is a little more expensive though, so it's common for people to start with Paperclip and migrate to Cloudinary when the app grows.