downloader une image depuis base MySQL

Répondre
fausto
le 31/05/2009 à 16:02
fausto
Bonjour à tous

Mon souci est donc le suivant :
j'ai une base de données MySQL, avec des images, et je souhaite, pour chaque image,
afficher un lien pour downloader cette image .

J'ai un script qui fonctionne presque !!! :

// connexion à la bdd

if(isset($_GET['id']))
{
// if id is set then get the file with the id from database

$id = $_GET['id'];
$query = "SELECT nom, taille, poids, img " .
"FROM paysages WHERE id = '$id'";


$result = mysql_query($query) or die('Error, query failed');
list( , , , $img) = mysql_fetch_array($result);


header("Content-length: $poids");
header("Content-type: $taille");
header("Content-Disposition: attachment; filename=$img");
echo $img;
exit;
}


Le problème est que ça me download bien le "bon" fichier, mais le nom du fichier
n'est pas bon ; je m'explique :
au lieu de downloader image.jpg, ça download un fichier qui s'appelle :
dossier1-dossier2-dossier3-image.jpg ?????
c'est à dire, en reprenant toute l'arborescence vers le fichier

Si vous avez une idée ...

Merci d'avance

Fausto
LA GLOBULE
le 31/05/2009 à 18:39
LA GLOBULE
Surement ta variable $img qui contient tout ca.

Debug en collant un header de type text/plain et fais un echo de $img, tu verras bien.
fausto
le 31/05/2009 à 19:58
fausto
Salut, et merci pour ta réponse
ça avance un peu, je récupère le bon nom du fichier
mais celui-ci semble corrompu :

<?php
if(isset($_GET['id']))
{
$id = $_GET['id'];
$query = "SELECT nom, taille, poids, date, img FROM paysages WHERE id = '$id'";


$result = mysql_query($query) or die('Error, query failed');
list($nom, $taille, $poids, $date, $img) = mysql_fetch_array($result);
//$img = substr($img, 30, 0); // retourne "cde"
$img2=basename($img);


header("Content-length: $poids");
header("Content-type: image/jpeg");
header("Content-Transfer-Encoding: binary" );
header("Content-Disposition: attachment; filename=$img2");
echo $img2;
exit;
}
?>


Je pense que c'est un souci dans les "header"
Je cherche encore, si quelqu'un a un idée

Merci

Fausto
fausto
le 01/06/2009 à 18:22
fausto
Bonjour

après deux jours de recherche, j'en suis toujours au même point !!
bref, je télécharge l'image, mais le fichier est corrompu, c'est la déprime !
j'ai bien essayé la solution de "la Globule" :
http://www.lephpfacile.com/forum/1-php-mysql/5927-code-pour-forcer-un-telechargement-de-pdf

solution qui a l'air pas mal, sauf que je ne comprends pas quelle est cette variable "$blob" ??
J'ai bien essayé le "file_get_contents", mais qui me renvoie un million de caractères (il s'agit d'une image jpeg)

Bref, bref

Si quelqu'un peut m'aider sur ce coup-là, ce serait fabuleux

Merci

Fausto
fausto
le 02/06/2009 à 13:44
fausto
Salut à tous !

VICTOIRE !!!

pour ceux que çà intéresse de downloader une image depuis une base MySQL (via php) :

<?php
// connexion à la base ici

// le lien dans la page qui affiche la vignette est :
// <a href="download.php?id='.$id.'">T&eacute;l&eacute;charger</a>

if(isset($_GET['id']))
{
$id = $_GET['id'];
$query = "SELECT nom, taille, poids, date, img FROM table WHERE id = '$id'";


$result = mysql_query($query) or die('Error, query failed');
list($nom, $taille, $poids, $date, $img) = mysql_fetch_array($result);

$img2 = substr($img, 3); // pour retrouver le bon chemin vers l'image
$img3 = '..'.$img2;


list($width, $height, $type, $attr) = getimagesize($img3);
if ($type == 2) {
// Dialogue de téléchargement
header("content-type: application/octet-stream");
// on indique le fichier qui va etre téléchargé
header("Content-Disposition: attachment; filename=".$img3);

flush(); // Envoie le buffer
readfile($img3); // Envoie le fichier
exit;
}

}
?>


Testé sous Safari, Firefox OSX + IE6 Windows XP

Bonne journée à tous
Merci encore à La Globule de nous consacrer tout ce temps smiley

Faustosmiley
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours