href lien d'image Télécharger en cliquant

je génère des liens normaux comme: <a href="/path/to/image"><img src="/path/to/image" /></a> dans une application web.

Lorsque je clique sur le lien, il affiche l'image dans une nouvelle page. Si vous souhaitez enregistrer l'image, puis vous devez cliquer droit et sélectionner "enregistrer sous"

Je ne veux pas de ce comportement, je voudrais avoir une boîte de téléchargement surgissant quand je clique sur le lien, est-ce possible juste avec html ou javascript? Comment?

sinon je suppose que je devrais écrire un téléchargement.php script et l'appeler dans le href avec le nom de fichier comme paramètre...?

149
demandé sur bstpierre 2010-03-09 13:09:29

10 réponses

<a download="custom-filename.jpg" href="/path/to/image" title="ImageName">
    <img alt="ImageName" src="/path/to/image">
</a>

il n'est pas encore entièrement supporté http://caniuse.com/#feat=download , mais vous pouvez utiliser avec modernizr https://modernizr.com/download/?adownload-setclasses ( Sous Non-core détecte ) pour vérifier le support du navigateur.

198
répondu Francisco Tomé Costa 2016-06-02 13:14:26

la façon la plus facile de créer un lien de téléchargement pour l'image ou html est de définir attribut de téléchargement , mais cette solution ne fonctionne que dans les navigateurs modernes.

<a href="/path/to/image" download="myimage"><img src="/path/to/image" /></a>

"myimage" est un nom de fichier à télécharger. L'Extension sera ajoutée automatiquement exemple ici

50
répondu Aleksey Saatchi 2013-01-28 17:20:01
<a href="download.php?file=path/<?=$row['file_name']?>">Download</a>

de téléchargement.php:

<?php

$file = $_GET['file'];

download_file($file);

function download_file( $fullPath ){

  // Must be fresh start
  if( headers_sent() )
    die('Headers Sent');

  // Required for some browsers
  if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');

  // File Exists?
  if( file_exists($fullPath) ){

    // Parse Info / Get Extension
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);

    // Determine Content Type
    switch ($ext) {
      case "pdf": $ctype="application/pdf"; break;
      case "exe": $ctype="application/octet-stream"; break;
      case "zip": $ctype="application/zip"; break;
      case "doc": $ctype="application/msword"; break;
      case "xls": $ctype="application/vnd.ms-excel"; break;
      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
      case "gif": $ctype="image/gif"; break;
      case "png": $ctype="image/png"; break;
      case "jpeg":
      case "jpg": $ctype="image/jpg"; break;
      default: $ctype="application/force-download";
    }

    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: $ctype");
    header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$fsize);
    ob_clean();
    flush();
    readfile( $fullPath );

  } else
    die('File Not Found');

}
?>
45
répondu amir 2011-08-30 12:41:20

Non, ça ne l'est pas. Vous aurez besoin de quelque chose sur le serveur pour envoyer un en-tête Content-Disposition pour définir le fichier comme une pièce jointe au lieu d'être en ligne. Vous pouvez le faire avec la configuration simple D'Apache.

j'ai trouvé un exemple de faire en utilisant mod_rewrite , bien que je sais qu'il y a un moyen plus simple.

10
répondu Quentin 2010-03-09 10:15:27

essayez ceci...

<a href="/path/to/image" download>
    <img src="/path/to/image" />
 </a>
6
répondu edCoder 2015-07-31 11:19:20

Si vous Utilisez HTML5 vous pouvez ajouter l'attribut "télécharger" pour vos liens.

<a href="/test.pdf" download>

http://www.w3schools.com/tags/att_a_download.asp

5
répondu Jijo Paulose 2016-01-20 11:42:24

vous ne pouvez pas le faire avec pur html/javascript. C'est parce que vous avez une connexion séparée au serveur web pour récupérer un fichier séparé (l'image) et un serveur web normal servira le fichier avec des en-têtes de contenu définis de sorte que le navigateur lisant le type de contenu décidera que le type peut être manipulé en interne.

la manière de forcer le navigateur à ne pas traiter le fichier en interne est de changer les en-têtes (content-disposition prefereably, ou content-type) afin le navigateur n'essaiera pas de gérer le fichier en interne. Vous pouvez soit faire cela en écrivant un script sur le serveur web qui définit dynamiquement les en-têtes (i.e. télécharger.php) ou en configurant le serveur web pour retourner différents en-têtes pour le fichier que vous voulez télécharger. Vous pouvez le faire par répertoire sur le serveur web, ce qui vous permettrait de vous en tirer sans écrire de php ou de javascript-il suffit d'avoir toutes vos images téléchargées à cet endroit.

3
répondu Colin Pickard 2011-10-03 13:42:02

code Simple pour le téléchargement d'image avec un clic d'image en utilisant php

<html>
<head>
    <title> Download-Button </title>
</head>
<body>
    <p> Click the image ! You can download! </p>
    <?php
    $image =  basename("http://localhost/sc/img/logo.png"); // you can here put the image path dynamically 
    //echo $image;
    ?>
    <a download="<?php echo $image; ?>" href="http://localhost/sc/img/logo.png" title="Logo title">
        <img alt="logo" src="http://localhost/sc/img/logo.png">
    </a>
</body>

3
répondu Sashtha Manik 2016-06-02 13:08:03

télécharger L'Image en cliquant sur l'image!

j'ai fait ce simple code!:)

<html>
<head>
<title> Download-Button </title>
</head>
<body>
<p> Click the image ! You can download! </p>
<a download="logo.png" href="http://localhost/folder/img/logo.png" title="Logo title">
<img alt="logo" src="http://localhost/folder/img/logo.png">
</a>
</body>
</html>
1
répondu Sashtha Manik 2016-06-02 10:51:28

il y a 2 façons simples d'éviter d'ouvrir un fichier au lieu de le télécharger. 1. Une solution simple, qui est à l'épreuve des balles, est de changer le nom de l'extension de l'image en quelque chose qu'un navigateur ne comprend pas, comme myimage.zzz Vous avez besoin de dire à votre visiteur de changer l'extension après le téléchargement, cependant. Peut-être pas pratique. 2.) Mettez l'image dans un zip, je le fais généralement avec des fichiers que je ne veux pas avoir ouverts immédiatement.

les tags de téléchargement ne ne travaille pas pour safari ou IExplorer. J'espère que ça aide?

-3
répondu Rudolf B 2015-06-25 15:40:58