Pregunta

Me gustaría crear nombres de carpetas al azar en mi sitio web para almacenar imágenes y sus miniaturas, pero en lugar de usar la versión completa de un guid generado, estaba pensando en usar solo una parte, tal vez solo los primeros 8 caracteres y posiblemente la base64 lo codifique. Estoy preocupado por posibles colisiones sin embargo.

¿Alguien me puede indicar la dirección correcta en cuanto a si es una idea lo suficientemente buena? ¿Existen soluciones alternativas que puedan usarse si quiero mantener el nombre con un cierto número de caracteres?

ACTUALIZACIÓN : estoy tratando de mantenerme alejado de la ruta. GetRandomFileName, ya que usa guid en bruto y no tiene 12 caracteres de longitud ...

¿Fue útil?

Solución

¿Por qué no solo usas algo como esto y redondeas en bucle hasta que puedas crear el archivo sin conflicto?

 const string ValidChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 static string GenerateName(Random random, int length)
 {
     char[] chars = new char[length];
     for (int i=0; i < length; i++)
     {
         chars[i] = ValidChars[random.Next(ValidChars.Length)];
     }
     return new string(chars);
 }

La razón para pasar el RNG es evitar los problemas típicos de crear un nuevo RNG en el método (se duplica cuando se llama en una sucesión rápida) mientras no se usa un RNG estático (que no es seguro para subprocesos).

Una alternativa sería tener un solo RNG de solo lectura estática y serializar las llamadas dentro de GenerateName mediante el bloqueo.

El punto principal es que de alguna manera generas un nombre aleatorio, y sigues intentando crear archivos con nombres aleatorios hasta que tengas éxito, lo que probablemente suceda muy rápidamente (12 caracteres [AZ 0 -9] otorga 4.738.381.338.321.616.896 combinaciones posibles).

Otros consejos

System.IO.Path.GetRandomFileName ()

Puede usar la clase Path en System.IO para, entre otras cosas, generar nombres de carpetas y archivos aleatorios.

Si está utilizando una base de datos para su sitio web, puede usar un número de incremento automático o una secuencia para generar nombres de archivo únicos para las imágenes.

Usando Oracle, crearías una secuencia de la siguiente manera:

CREATE SEQUENCE sequence_name     Valor de MINVALUE     Valor MAXVALUE     Empezar con valor     INCREMENTO POR VALOR     Valor CACHE;

Para obtener el siguiente valor en la secuencia, use el siguiente valor de la secuencia. Por ejemplo

CREAR SECUENCIA seq_user_id;

SELECCIONE seq_user_id.NEXTVAL FROM dual;

INSERT INTO test_bed (user_id, class_type, room_location) VALORES (seq_user_id.NEXTVAL, 'Underwater Basketweaving', 'RM1205');

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top