Créer un lien de téléchargement direct d'une image

Résolu
iKelSilver - 28 déc. 2018 à 17:40
 iKelSilver - 29 déc. 2018 à 03:37
Bonjour,
Je suis sur un projet qui me demande de créer un bouton de téléchargement d'une image depuis une base de données. Une fois l'utilisateur clique sur ce bouton, le téléchargement de l'image en question se lance automatiquement. Comment faire cela ?
J'ai trouvé le code suivant sur Google. Mais, après plusieurs tentatives et autres réponses que proposent d'autres site web, je ne suis pas toujours satisfaire.
Voici le code :
<a href="mon_image.jpg" download="IMG144144.jpg" target="_blank" >Télécharger</a>


Je veux qu'au clic sur < Télécharger >, le téléchargement de cette image cliquée démarre automatiquement.
Quelqu'un peut m'aider à faire cela ?

Merci
A voir également:

1 réponse

jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
28 déc. 2018 à 20:18
Bonjour,

Tu peux forcer le navigateur à télécharger l'image en modifiant le header.

Pour ça, ton lien (contenant le nom de l'image en paramètre,
<a href="downloadImg.php?image=mon_image.jpg" target="_blank" >Télécharger</a>


pointe vers un fichier qui contient ceci :
<?php
/*
 * Fichier : downloadImg.php
 * Force le téléchargement du fichier
 * @image : paramètre envoyé via l'url en $_GET
*/

//récupération de l'image en paramètre
$file = !empty($_GET['image']) ? $_GET['image'] : NULL; 

//si l'image existe
if($file && file_exists($file)){
    header('Content-Type: application/force-download');
    header("Content-Transfer-Encoding: binary");
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Pragma: no-cache');
    header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    header('Expires: 0');
    readfile($file);
    exit();
}else{
    echo 'Le fichier n\'existe pas : '.realpath($file);
}

1
Bonsoir Jordane45,
Merci pour la réponse. Mais, une inquiétude. Dans le lien
<a href="downloadImg.php?image=mon_image.jpg" target="_blank" >Télécharger</a>
Est-ce que je vais mettre seulement le nom de l'image ou plutôt le chemin complet de l'image ? Exemple :
<a href="downloadImg.php?image=http://www.monsite.com/photos/mon_image.jpg" target="_blank" >Télécharger</a>
Quand j'ai essayé les deux, je reçois bien la valeur de
$_GET
mais, par contre, le téléchargement n'est pas démarré.

Que je dois-je faire ?

Merci
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344 > iKelSilver
28 déc. 2018 à 22:08
Il faut mettre le chemin vers l'image
L'url doit fonctionner aussi je pense.
Par contre, vu qu'il y a des slashes, essaye d'ajouter un urlencode http://php.net/manual/fr/function.urlencode.php
Ou au pire, un addSlashes (mais dans ce cas, il faudra surement un stripslashes à la récupération du get )

Essaye aussi le header
 header("Content-type: image/jpeg");  

à la place
header("Content-Transfer-Encoding: binary");
.
0
Merci Jordane45,
J'ai essayé mais sans succès. Voici ce que j'ai enfin trouvé et qui a résolu mon problème:
<script>


You can try this to force download an image.
However you cannot download something that is not on your domain, unless you are using a domain which accepts cross origin requests (Eg:Imgur)

You may use the 'download' attribute of HTML5 but still you won't be able to load in cross origin image.

Also the below method will support legacy browsers as well

function forceDownload(link){
    var url = link.getAttribute("data-href");
    var fileName = link.getAttribute("download");
    link.innerText = "Working...";
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.responseType = "blob";
    xhr.onload = function(){
        var urlCreator = window.URL || window.webkitURL;
        var imageUrl = urlCreator.createObjectURL(this.response);
        var tag = document.createElement('a');
        tag.href = imageUrl;
        tag.download = fileName;
        document.body.appendChild(tag);
        tag.click();
        document.body.removeChild(tag);
        link.innerText="Download Image";
    }
    xhr.send();
}

</script>
<a href="#" data-href='https://i.imgur.com/Mc12OXx.png' download="Image.jpg" onclick='forceDownload(this)'>Download Image</a>


Merci beaucoup
0
Rejoignez-nous