Well, the problem is that you want something unique AND short. You can't really have both.
The densest representation of a random number that is human-readable would be something like base64 (substitute valid characters for any characters that shouldn't be in a filename). However that will still mean there are "only" 64 variations for each character in the filename.
If you want a simple filename, just use an incrementing number and encode it in base64 (pad it out if you want a minimum length for the name). If you want it to be non-guessable, you need a random number generator, but then you need to make sure to avoid doubles or you'll end up overwriting the file. This chance for disaster is higher the shorter the names are.
You could probably use your own custom equivalent of base64 with more characters than just the 64 provided by that encoding, but then you'd have to check what your OS considers a valid filename and you'd still have to make sure the client can access it properly (if it isn't just a temporary data store). The easiest way to do this is to create a string with every character you want to be legit in it and then convert the number's base into whatever the length of the string is (there are explanations of base conversion on Google if you don't know how to do that). That would allow for even higher information density and just even shorter filenames.