Uploader gratuíto v0.25
Ya hace casi medio año desde aquel primer uploader en versión más alpha que beta, pero que al menos me ha servido para compartir ciertos archivos con la gente de manera cómoda y rápida.
Este fin de semana he aprovechado para actualizarlo un poco, utilizando un control de versiones como mostré en el videotutorial que hice, por lo que puedo decir, que incluso en proyectos pequeños como este sirve para localizar alguna metedura de pata sin comernos mucho la cabeza.
Y ya solo me queda invitaros a probarlo, y si queréis, podéis colgarlo en vuestro hosting, ya que comparto el cutre-código, que fijo que a alguien le viene bien. Algunas de las features de esta versión son:
- URL más cortas, ahora son de la forma http://up.patoroco.net/XXXX (1.500.625 posibilidades)
- Recuerda el nombre del archivo original.
- Devuelve cabeceras originales, obligando a descargar el archivo al navegador en caso necesario.
- Envía tamaño del archivo para que los gestores de descargas calculen tiempos estimados y demás.
- La interfaz sigue siendo igual de cutre 🙂
La tabla que utilizo para guardar la información de los archivos tiene la siguiente estructura:
CREATE TABLE IF NOT EXISTS `uploader` (
`clave` varchar(6) NOT NULL default '' COMMENT 'Clave que se pondrá a cada archivo (http://up.patoroco.net/*clave*)',
`original` varchar(100) NOT NULL default '' COMMENT 'Nombre del archivo que subieron',
`tipo` varchar(50) default NULL,
`tamano` int(11) default NULL,
`fecha` datetime default NULL,
`agente` text,
`ip` varchar(15) default NULL,
PRIMARY KEY (`clave`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- Documentación del manejo de headers de archivos | RFC2183
- Uploader | up.patoroco.net
- Código Fuente | uploader-0.2.5
Interesante, unos consejos:
– intentaría separar la vista del controlador y modelo (buscan MVC en google y mirate algún video de RoR)
– Yo no metería algo que viene de usuario (como por ejemplo el user agent) directamente a una consulta SQL
– Espero que el rand de php no sea determinista :P. Yo para generar el nombre único lo haría con un hash del nombre del fichero y el id de la base de datos, para no tener que iterar.
– Para rematar la faena yo haría una redirección cuando se pide el fichero para que sea apache (o cualquier otro servidor web más rápido) sirviese el estático, que es de largo mucho más eficiente.
Hola javi, otra vez por aquí. Te voy a contestar cada punto, para que veas que buen bloger de esos soy ^^
– Creo que para un proyecto tan tan tan tan pequeño, utilizar MVC es una pérdida de tiempo, aunque las cosas hechas bien, bien hechas están…
– Lo de meter el Agent directamente por SQL tienes razón, me lo apunto para añadir un filtro en la siguiente versión, como para el nombre 🙂
– Este punto no entiendo lo que dices, pero… si… o… no? jaja, en serio, no entiendo. Lo del hash más o menos se por donde van los tiros, pero eso de determinista, me suena a Autómatas, y aún la tengo suspensa esa 🙂
– Lo malo de hacer la redirección por apache no sería que tendría que escribir el .htaccess dinámicamente? O sino me tocaría guardar los archivos con el mismo nombre que se suben, y eso no me parece correcto, por problemas de sobreescritura, por ejemplo.
De todos modos, se agradecen las críticas constructivas como en este caso, y me las apunto para la siguiente versión, que a ver cuando me vuelve a dar por tocar este código (de la última pasaron 6 meses :))
el MVC deberías usarlo aunque sea un hello world ¬¬.
Lo de la redirección es de la siguiente forma:
– Los archivos subidos los almacenas en una carpeta pública http
– cuando llegue una petición al servidor de fichero con php retornas un 302 [1] (por ejemplo) con el campo location al apuntando al estático.
– el navegador hará la redirección hacia el fichero estático que es servido por apache y no por un script de php.
Es un tema de eficiencia, no es realmente muy importante. Lo de usar un framework MVC sí lo es.
[1] http://en.wikipedia.org/wiki/HTTP_302
Lo que se podría añadir, también, podría ser la fecha y hora a la que se descargó por ultima vez. De esa forma, podrías borrar archivos que no se han descargado en un mes, o en un tiempo.
De esta forma, a la larga, ganaras en espacio (aunque no te falte), pero no tendrás cosas colgadas que ya ni se usan.
Un saludo
Oye «nombre», pues es una cosa que me apunto para futuras versiones, ya que como dices, no ando escaso de espacio, pero ir haciendo limpieza (más por la base de datos que por otra cosa) puede venir bien, y así evitaría la idea de ampliar en un futuro (muy lejano, claro) la cadena de caracteres a 5 en lugar de 4 como está ahora 🙂
@javi lo del MVC me sigue pareciendo «excesivo» para proyectos pequeños, aunque bien es cierto que las buenas costumbres nunca están de más…. Referente a lo de redirigir con Apache, te pongo un problema: tu subes el archivos fotos.zip, y luego voy yo y subo un fichero fotos.zip. ¿Qué pasa? Con tu método (hasta donde yo entiendo), te tocaría sobrescribir, o bien renombrar, con lo cual ya no guardarías el nombre del archivo correcto. Pero vamos, coméntame un poco más sobre esto 😛