2010-07-01 6 views
4

J'ai stocké une image dans ma base de données en tant que fichier BLOB. Ce n'est peut-être pas la meilleure pratique (je le sais). Je voulais créer un lien sur ma page lorsque je cliquais avec invite l'utilisateur avec l'invite de fichier de sauvegarde typique afin qu'ils puissent enregistrer le fichier sur leur disque personnel.Enregistrer l'image BLOB sur le disque à partir de la base de données en PHP

J'ai fait des recherches en ligne, mais ce que j'essaie ne semble pas fonctionner, il suffit de poster les octets sur ma page et non dans un fichier. Mon code pour enregistrer le fichier est ci-dessous. J'utilise un framework pour que la transaction DB et le code retrevial ​​semblent étranges mais que les valeurs soient correctement définies. Les fichiers ont également été encodés en base64 avant d'être stockés dans la base de données. J'appelle donc la fonction de décodage pour la ramener à son état normal.

function save_file($file_id) { 
    $result = $DB->get_file($file_id); 
    $size = $result->fields['size']; //1024 
    $mime = $result->fields['mime']; //image/jpg 
    $name = $result->fields['name']; //test.jpg 

    header("Content-Disposition:attachment;filename=".$name); 
    header("Content-Type=: ".$mime); 
    header("Content-Length: ".$size); 

    base64_decode(file); 
    echo($file); 
    exit(); 
} 

Répondre

6
function save_file($file_id, $target_folder) { 
    $result  = $DB->get_file($file_id); 
    $file_content = $result->fields['your_file_content_field']; 
    $name   = $result->fields['name']; 

    /* Decode only if the file contents base64 encoded 
    * before inserting to database. 
    */ 
    $file_content = base64_decode($file_content); 

    return file_put_contents($target_folder.'/'.$name, $file_content); 
} 
7

Je pense que votre tête Content-Type est erroné. Que = ressemble à une faute de frappe.

+2

+1 yeux d'aigle .. – Cristian

+1

LOL. J'y suis arrivé! –

Questions connexes