Saltar al contenido

📁 Archivos de prueba

Archivos ficticios para pruebas de subida, valores límite y manejo de errores. Todos los archivos son gratuitos y sin registro. Se incluyen hashes MD5 / SHA-256 y comandos curl / wget / PowerShell.

Por formato

Por uso

📌 Incluido con cada archivo

  • ✅ Tamaño exacto en bytes garantizado
  • ✅ Hashes MD5 / SHA-256 publicados
  • ✅ Ejemplos de comandos curl / wget / PowerShell
  • ✅ Enlaces directos (vía CDN / descarga rápida)

Referencias relacionadas

📖 Dónde se suele tropezar

Archivos de relleno con contenido conocido, para ejercitar limites de subida y codigo de manejo de ficheros. Sin registro, descarga directa, cada uno con MD5 / SHA-256 y un comando curl listo. Que uno de estos pase no demuestra que tu manejo sea seguro. Aqui compruebas como se tratan tamanos y formatos; la resistencia a extensiones disfrazadas, bombas zip y estructuras internas malformadas requiere pruebas aparte.

Caso Qué ocurre Qué hacer
Un archivo de 10 MB no llega como 10 MB multipart/form-data anade un delimitador y cabeceras, asi que la peticion pesa unos cientos de bytes mas. Incrustado en JSON como base64 crece alrededor de un 33%. Usa los archivos de umbral de 9,9 / 10,0 / 10,1 MB al tantear un limite. Si hay base64 de por medio, calcula el limite real en unas tres cuartas partes.
Pasa en el navegador y falla en el servidor El limite no esta en un solo sitio. client_max_body_size de nginx, upload_max_filesize y post_max_size de PHP, y tu propia validacion actuan de forma independiente. Gana el valor mas pequeno. Manten post_max_size igual o por encima de upload_max_filesize, y dimensionalo para el total cuando van varios ficheros a la vez.
Comprobar la extension deja pasar un archivo disfrazado Un ejecutable renombrado a .png supera tanto la comprobacion de extension como la de Content-Type, porque ambos valores los elige quien envia. Juzga por los bytes iniciales. PNG es 89 50 4E 47, PDF 25 50 44 46, ZIP 50 4B 03 04; la tabla completa esta en la referencia de magic bytes.
El tamano cabe pero la peticion expira Aun dentro del limite de tamano, una conexion lenta tarda en transferir. Lo que corta la peticion no es el tope de tamano sino un tope de tiempo. Sube a la vez client_body_timeout y fastcgi_read_timeout de nginx junto con max_execution_time y max_input_time de PHP. Subir solo uno deja que te corte el mas corto.
Nada se prueba contra un archivo corrupto Las conexiones caidas y los errores de transferencia hacen que lleguen archivos truncados y cabeceras rotas de forma rutinaria. Muchas implementaciones lanzan una excepcion ahi y se la tragan. Pasa primero un archivo roto a proposito y comprueba hasta el mensaje que ve el usuario.

Aunque pase cada archivo de aqui, el analisis antivirus, el agotamiento de disco con subidas simultaneas y los limites de tu almacenamiento de objetos son cuestiones aparte. Poder aceptar algo hasta el limite no es lo mismo que deber aceptarlo.