Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/04/2008, 15:08
Avatar de farra
farra
 
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 8 meses
Puntos: 20
Descargar archivos traidos del codigo binario de la base de datos

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 ?