Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/05/2017, 14:18
Avatar de Heiroon
Heiroon
 
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Exclamación Leer directorio de archivos y cargarlos a BD como Bytea

Buenas tardes estimados,

solicito su ayuda para corregir este script que ya tiene días dándome problemas y no encuentro la manera de solucionarlo. No se si este del todo correcto, por lo cual pido su auxilio. Como dice el titulo, la idea es verificar dentro de un directorio temporal una carpeta, leer los archivos que contiene y uno por uno, guardarlos en la BD como un bytea.

El problema es que una vez que intento descargar el archivo, el mismo viene corrupto y con variaciones de tamaño bastantes considerables. A continuación les dejo los scripts de subida y bajada.

De antemano muchas gracias por su apoyo.

Subida

Código PHP:
                $path  "../../../../tmp/" $attach_folder_key "/";
                
$files array_diff(scandir($path), array('.''..'));
                
                
//Si se adjuntaron archivos 
                
if(is_dir($path) && (count($files) > 0)){
                    
                    if( !isset(
$id_pun_int) ){
                        
$queryId "SELECT id_pun_int FROM general.puntos_interes ORDER BY id_pun_int DESC LIMIT 1";
                        
$db->Query($queryId);
                        
$id_pun_int $db->Fresult();
                    }
                    
                    foreach(
$files as $fileName){
                        
                        
$filePath $path $fileName;
                        
$safeFileName pg_escape_string($fileName); //name
                        
                        
$p fopen($filePath,'rb');
                        
$fsize filesize($filePath); // size
                        
$data fread($p$fsize);
                        
                        
$dat  pg_escape_bytea($data); // bytea
                                                
                        
$mime getFileMimeType($filePath); // mime
                        
                        
$queryInsert "    INSERT INTO general.recursos 
        
                                                (nom_rec, mim_rec, tam_rec, raw_dat_rec) 
                            
                                            VALUES 
                            
                                                ('$safeFileName', '$mime', '$fsize', '$dat'::bytea)
        
                                            RETURNING id_rec"
;
                        
                        
$db->Query($queryInsert);
                        
$id_rec$db->Fresult();
                        
                        
$queryAsoc "INSERT INTO general.puntos_interes_recursos (id_pun_int, id_rec) VALUES ($id_pun_int, $id_rec)";
                        
$db->Query($queryAsoc);
                    }
                } 

Descarga

Código PHP:
if( !isset($_REQUEST)){
        die(
_('403 - Forbidden.'));
    }
    
    if( !isset(
$_REQUEST["id_rec"])){
        die(
_('Faltan parámetros.'));
    }
    
    
$ConnPG = new pgdb();
    if (!
$ConnPG->Connect(false))
    {
        die(
_('No se pudo realizar la conexión.'));
    }
    
    
$query"SELECT * FROM general.recursos WHERE id_rec = " $_REQUEST["id_rec"];
    
    
$ConnPG->Query($query);
    
$fileData $ConnPG->Fobject();
    
    
$file pg_unescape_bytea($fileData->raw_dat_rec);
    
$name $fileData->nom_rec;
    
$mime $fileData->mim_rec;
    
$size $fileData->tam_rec;
    
    
header('Connection: Keep-Alive');
    
header('Expires: 0');
    
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    
header('Pragma: public');
    
header('Content-Length: ' $size);
    
header('Content-Type: ' $mime);
    
header('Content-Disposition: attachment; filename=' $name);
    
    echo 
$file
Cualquier pregunta o información requerida estoy a la orden.
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!

Última edición por Heiroon; 02/05/2017 a las 14:24