Bueno, el problema es que desea algo único Y corto. Realmente no puedes tener ambos.
La representación más densa de un número aleatorio que sea legible por el ser humano sería algo así como base64
(sustituya los caracteres válidos para cualquier carácter que no debería estar en un nombre de archivo). Sin embargo, eso todavía significará que hay "solo" 64 variaciones para cada carácter en el nombre del archivo.
Si desea un nombre de archivo simple, simplemente use un número incremental y codifíquelo en base64 (rellene si desea una longitud mínima para el nombre). Si desea que no se pueda adivinar, necesita un generador de números aleatorios, pero luego debe asegurarse de evitar los dobles o terminará sobrescribiendo el archivo. Esta posibilidad de desastre es mayor cuanto más cortos son los nombres.
Probablemente pueda usar su propio equivalente personalizado de base64 con más caracteres que solo los 64 proporcionados por esa codificación, pero luego deberá verificar qué es lo que su sistema operativo considera un nombre de archivo válido y aún deberá asegurarse el cliente puede acceder a él correctamente (si no es solo un almacén de datos temporal). La forma más fácil de hacerlo es crear una cadena con cada carácter que quieras que sea legítimo y luego convertir la base del número en la longitud de la cadena (hay explicaciones de conversión básica en Google si no sabes como hacer eso). Eso permitiría una densidad de información aún mayor y nombres de archivo incluso más cortos.
El archivo generado no tiene una extensión y agregar una extensión manualmente rompe la garantía de exclusividad. – Farhadi