|
En este artículo veremos rápidamente cómo tratar los nombres de archivos que son subidos desde una aplicación web.
Al procesar un archivo enviado mediante un formulario, mediante el método POST, tenemos varias formas de tratar el nombre, entre las que podemos mencionar.
Lo más simple, dejar el mismo nombreSi bien es lo más fácil y lo primero que uno piensa, esta solución nos puede traer algunos inconvenientes. Lo primero que hay que tener en cuenta es que los usuarios suelen nombrar a los archivos con espacios y acentos y nos puede traer problemas al momento de querer referenciarlo. Por ejemplo si el usuario sube el archivo foto de ñandú.jpg
Deberíamos referenciarlo como
<a href="/foto%20de%20%F1and%FA.jpg">descargar foto de ñandú.jpg </a>
¿A qué se debe esto? A que una URL se debe codificar según el RFC 1738, para normalizar la comunicación bajo un mismo juego de caracteres. La conversión del nombre del archivo la realizaremos con la función de PHP rawurlencode();Así podemos tener el siguiente ejemplo:
<a href="/<? echo rawurlencode("foto%20de%20%F1and%FA.jpg")?>">descargar foto de ñandú.jpg </a>
Dejar el mismo nombre suele ser una buena alternativa si el usuario tiene que volver a hacer uso del archivo, es decir si lo va a descargar, ya que resultará conveniente respetarle el nombre que seleccionó y enviarle el archivo tal cual lo subió a la aplicación.
Cambiar el nombre del archivo Este caso nos puede ser útil cuando necesitemos unificar bajo algún criterio, ordenar o bien clasificar los archivos. Por ejemplo puede resultar práctico asociar los archivos adjuntos a un determinado registro, con un mismo prefijo y luego un número de secuencia. Los criterios a tener en cuenta dependerán de nuestras necesidades y forma de organizar los archivos
No nos tenemos que olvidar que estamos cambiando el nombre del archivo del usuario, por lo tanto esta solución deberíamos tomarla cuando no nos interesa mantener el nombre.
$archivo = $_FILES['archivo']['tmp_name']];
$numero = ObtenerProximaSecuencia(); // devuelve el número de secuencia
$nombre_nuevo = "imagen_".$numero . ".jpg"; //solo sube en formato JPG para simplificar el ejemplo
if (move_uploaded_file($archivo, $nombre_nuevo ))
echo "archivo subido correctamente";
else
echo "ERROR al subir el arvhivo.";
Seguramente se te ocurren otras formas de procesar los archivos, podés contarnos tu solución.
|