Télécharger une image sans un clic droit

Résolu
bobenausaure Messages postés 228 Date d'inscription   Statut Membre Dernière intervention   -  
 Barbagroupi -
Bonjour,

Sur mon site, je souhaite créer un lien permettant de télécharger une image. Mais lorsque l'utilisateur clique dessus, cela affiche l'image et ne la télécharge pas. Pour la télécharger, il faut faire Clic droit - Enregistrer sous...

Y a-t-il un autre moyen pour la télécharger directement sans l'afficher et faire Enregistrer sous... ??

Merci d'avance.
Amicalement.
A voir également:

9 réponses

PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
Bjr

Si tu utilises PHP alors tu peux essayer


test_envoi.php

<html>
<body>
<a href="envoi_image.php?filename=mon_image.jpg">Cliquer ici pour télécharger l'image</a>
</body>
</html>




envoi_image.php

<?php
if (isset($_GET["filename"]))
{
	$filename=$_GET["filename"];

	// Envoi du fichier
	header('Content-Transfer-Encoding: none');
	header('Content-Type: application/octetstream; name="'.$filename.'"');
	header('Content-Disposition: attachment; filename="'.$filename.'"');
	header('Content-length: '.filesize($filename));
	header("Pragma: no-cache"); 
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
	header("Expires: 0"); 
	@readfile($filename) OR die();
}		
?> 	

2
norris
 
Bonjour !

J'ai passé au moins 5 heures à chercher comment faire ça sans Javascript....
et je tombe là dessus......que du bonheur ! merci beaucoup pour l'astuce PhP !

Désolé de faire remonter le post juste pour ça, mais je me pose une question. Ca fonctionne impeccablement, mais j'ai choisi de mettre mon image dans un dossier au même niveau que les pages PHP...
Pas de soucis pour créer le lien...là ça marche toujours, mais le fichier se trouve renommé avec comme suffixe, le nom de ce "sous dossier".
Ce n'est pas très embêtant après tout, mais j'aimerais bien comprendre pourquoi et je n'y arrive pas. Si vous aviez une piste, ce serait sympa.
Merci d'avance ;)
1
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
Bjr

Evidemment car il faut conserver uniquement le nom du fichier : donc si $filename contient un chemin il suffit de le supprimer



<?php
if (isset($_GET["filename"]))
{
$filename=$_GET["filename"];
// ne conserver que le nom du fichier : le nom que verra s'afficher l'utilisateur
$uploadname=basename($filename);

// Envoi du fichier
header('Content-Transfer-Encoding: none');
header('Content-Type: application/octetstream');
header('Content-Disposition: attachment; filename="'.$uploadname.'"');
header('Content-length: '.filesize($filename));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
@readfile($filename) OR die();
}
?>
0
princesse95 > PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Ca marche nickel merci pour le code que j'ai eu du mail à trouver. Par contre, une fois l'image téléchargée, je ne peux rien faire. Elle ne s'ouvre pas et un message me dit que le fichier peut etre corrompu. Donc manque t-il quelque chose ? Merci
0
ClR555
 
C'est vieux je sais bien mais j'avais le même problème que Princesse 95... pas moyen d'ouvrir mon fichier image, qui se trouvait également dans un sous dossier, avec les même erreurs (image trop grande, corrompue...)...
en fait le pb n'est pas là : il faut que le script, qui contient des header, soit placé avant tout code html. et tout marche impec ! en effet, si tu ouvres ton fichier jpeg dans un bloc notes (notepad ++ par exemple ou autre) tu reconnaîtras certainement au début du script affiché ton code ! d'où l'image trop grosse...etc.
Voilou, faut le r'monter quoi !
0
matt
 
Moi c'était la ligne header('Content-length: '.filesize($filename)); qui posait problème et générait un fichier corrompu. une fois supprimée, plus de pb
0
babyloon Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   1
 
bonjour!

Je suis moi aussi hyper heureuse d'être tombée sur cette solution car celà fé trop de temps que je cherchais comment faire pour ouvrir cette fenêtre de téléchargement!!
Merci bcp tu me sauves!! :)))

Seulement, j'ai un tout ti problème au niveau du nom de mon image. Mes images viennent de ma base de données et sont dans une région répétée.
le nom de chaque image est donc : fondecran_".$id.".jpg

Lorsque je mets <a href="download.php?filename=fondecran_".$id.".jpg"> comme nom d'image et ke je veux télécharger l'image, il ne me met que "fondecran_" sur la fenêtre de téléchargement...blurps..
Sais-tu comment faire pour soit convertir le nom soit ce ke je dois mettre exactement à la place du nom de l'image pour ke celà fonctionne correctement,,?

Je t'en serai vmt reconnaisssante!!
Merci d'avance!!..
1
atomik
 
donne déjà le code de connexion et celui dans lequel tu traites $id.
mais je peux déjà te dire que c parce que ta variable est vide au moment du téléchargement.
0
tropare Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   17
 
il faut que tu mette limage comme lien de telechargement mais je n'est jamais essayé donc jpe pa te dire sans testé mé de tt façon sa va pa lé tué de faire un clic droit lol
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bobenausaure Messages postés 228 Date d'inscription   Statut Membre Dernière intervention   16
 
ok ouai, j'crois qu'y a pas d'autres solutions assez simple de toute façon...
0
bobenausaure Messages postés 228 Date d'inscription   Statut Membre Dernière intervention   16
 
ah bah ouai, là, ya pas mieux !!

c'est exactement c'que j'voulais !!

Merci beaucoup PhP.
0
norris
 
Merci pour ta réactivité PhP !

En plus la solution est simple ! Je débute en Php et je me rends compte qu'il y a toujours une solution déjà prévue pour beaucoup de cas....vraiment sympa ce Php !....
Merci encore pour ton aide rapide ;)
0
Syl Vie Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   1
 
pour télécharger des images sans faire un clic droit, tu peux aussi utiliser OutWit Hub. C'est une nouvelle extension firefox qui sert à récupérer des images, des photos, des adresses e-mails, etc en très peu de clics !
vous pouvez le télécharger sur mozilla.org.

a+
0
Barbagroupi
 
Attention à ce script si vous utilisez un CMS, ou si vous avez des choses à cacher sur votre site, par exemple en remplaçant le nom du fichier dans l'url, il permet de télécharger n'importe quel fichier (sauf restrictions ACL) depuis le site, comme le fichier contenant le mot de passe d'accès à mysql par exemple (wp-config.php), http://exemple.com/send-file.php?filename=../../cheminverslefichierconvoité.xxx !
0