If not, and we end up using a url shortening service, is the best way to self host our own service (we currently use mongoDB for our application and can theoretically do it) or to use an existing service? If existing service is ideal for us, some recommendations would be helpful.
Just hash them into something shorter? You can calculate the risk of collisions based on the expected volume of files/users, or since you control all the hashes anyway, you can just do a quick lookup to make sure that particular hash doesn't exist already? If you want to do something more human-readable, you can also consider "gyfcat" style URLs or look up "adjective adjective animal" hashers like https://cli.r-lib.org/reference/hash_animal.html
Or use a UUID?