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...?
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.
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
<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');
}
?>
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.
essayez ceci...
<a href="/path/to/image" download>
<img src="/path/to/image" />
</a>
Si vous Utilisez HTML5 vous pouvez ajouter l'attribut "télécharger" pour vos liens.
<a href="/test.pdf" download>
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.
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>
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>
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?