Base de datos:
Código:
--
-- Estructura de tabla para la tabla `archivos`
--
CREATE TABLE `archivos` (
`id` int(10) unsigned NOT NULL auto_increment,
`archivo_binario` longblob NOT NULL,
`archivo_nombre` varchar(255) NOT NULL default '',
`archivo_peso` varchar(15) NOT NULL default '',
`archivo_tipo` varchar(25) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
Formulario:
Código HTML:
<HTML>
<HEAD>
<TITLE>Binario a BD</TITLE>
</HEAD>
<BODY>
<br><br>
<FORM>
<div>
<p><strong>Archivo: </strong></p>
<p>
<INPUT>
</p>
<p>
<INPUT>
</p>
</div>
</FORM> <br><br>
<div>
<php>
</div>
</BODY>
</HTML>
Codigo para insertar:
Código:
Código PHP:
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre. Si no fue asi, te remite de nuevo al formulario de inserción:
// No se comprueba aqui si se ha subido correctamente.
if (empty($_FILES['archivo']['name'])){
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario ..
exit;
}
//establece una conexión con la base de datos.
$conexion = mysql_connect("localhost","root","") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("archivos",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.
// archivo temporal (ruta y nombre).
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;
// leer del archvio temporal .. el binario subido.
// "rb" para Windows .. Linux parece q con "r" sobra ...
$binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal)));
// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.
$binario_nombre=$_FILES['archivo']['name'];
$binario_peso=$_FILES['archivo']['size'];
$binario_tipo=$_FILES['archivo']['type'];
//insertamos los datos en la BD.
$consulta_insertar = "INSERT INTO archivos (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");
$donde=mysql_insert_id();
header("location: inserto.php?id=".$donde); // si ha ido todo bien
exit;
Codigo para ver:
Código:
Código PHP:
// OJO, sólo funciona con imagnes en formato JPEG ...
if(isset($_GET['id'])) {
$conexion=mysql_connect("localhost","root","") or die ("no se ha podido conectar a la BD");
mysql_select_db("archivos") or die ("no se ha podido seleccionar la BD");
$sql = "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'";
$consulta = mysql_query($sql,$conexion);
$imagen = mysql_result($consulta,0,"archivo_binario");
// Envio cabeceras al navegador .. se indica que lo "que vá" es una imagen de formato MIME JPEG
Header ("Content-type: image/jpeg");
// Generar el thumbnail:
// Se crea la imagen desde el campo binario de la BD
$img = imagecreatefromstring($imagen);
// Tamaño del Thumbanil (de la imagen a generar ..)
$picsize = 300;
// Se obtienen los datos del ancho y alto de la imagen.
$new_w = imagesx($img);
$new_h = imagesy($img);
// Se calcula la relación alto/ancho
$aspect_ratio = $new_h / $new_w;
// Se ajusta al nuevo tamaño
$new_w = $picsize;
$new_h = abs($new_w * $aspect_ratio);
// Se crea la mascara de la imagen nueva
$dst_img = imagecreate($new_w,$new_h);
// Se copia y reajusta el nuevo tamaño en la nueva imagen.
imagecopyresized($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img));
// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG
// El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen.
imagejpeg($dst_img,'',100);
}
El problema:
me funciona la insercion, y bajar el archivo cuando se trata de imagenes, pero como hago para bajar cuando el archivo que subi en la BD es un .exe o un .mp3 ?