2010-07-02 5 views
6

Le problème de base est le suivant: J'ai un lien vers un fichier image. Le comportement souhaité lorsque je clique sur le lien est d'obtenir la boîte de dialogue de téléchargement qui me permettrait de lancer un éditeur d'image associé. Cela ne se produit pas parce que le fichier image est rendu par le navigateur.html tag de téléchargement

Y at-il une magie HTML que je peux utiliser pour forcer le navigateur à offrir une boîte de dialogue de téléchargement lorsque l'utilisateur clique sur un lien?

Toute aide ou pointeur serait grandement appréciée.

Répondre

3

Deux Approches:

  1. Utilisation Data URIs dans le href d'une balise d'ancrage:

    <a href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAPCAYAAADphp8SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOnAAADpwBB5RT3QAAABZ0RVh0Q3JlYXRpb24gVGltZQAwMi8yNS8xMapAVMwAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzVxteM2AAABjklEQVQ4jZWTwWoTURSGv5lMp1OmxUIUXISCCbW06daNtGuh7uMbCHaeoOBSzBMEN92LXXThohVtoAshOyuKJQkaXWRjKi7aBjPT9v6uEsbpTGp/OHDPvf/5zjmLa0niCo0zWMODA2BZVqZTEkG1RdwhoLaxMKqTBJKWJO1JOpN0Iek8EQqeNxVXLP8jqS7pniXpe+1V9+yw058ft19yoqHKJb+9XikcOcDcYadvj4Mki+P68q1/F5hz4s1qGwsABNUWszMOD+7nWS75THk5wshw0DzhbeM3x/3zJG/CiWdBtTU6r63kuZ2f5NnmD8LI4Lk2TyoFHq7mefnm56XJMldaLE5T2+oSRgaAQWR4sdWlXJpO9WeCbvi5EWSoQWSYmkwvyQRdGOG5/z57rn0JfiWo8emY4FFhBPNcm/VKgQ/Nk1S/k3oLvN4/Ym31Jk8f38FzbQah4fPXU3be/8oEGSCXfBhEhu16j+16L6tXXKENfFwq+u3/caepXPLbwDsk3ZK0G/tr14lTSTuSin8BUMr8td343bwAAAAASUVORK5CYII=">Download</a>

  2. Dans certains navigateurs, comme Google Chrome et Firefox, vous pouvez faire:

    <a download="image.jpg" href="http://www.domain.com/image.jpg">Download</a>

0

Ce n'est pas possible avec du HTML, mais vous pouvez forcer le téléchargement du fichier en modifiant les en-têtes avec un langage côté serveur tel que PHP.


// grab the requested file's name 
$file_name = $_GET['file']; 

// make sure it's a file before doing anything! 
if(is_file($file_name)) 
{ 

    /* 
     Do any processing you'd like here: 
     1. Increment a counter 
     2. Do something with the DB 
     3. Check user permissions 
     4. Anything you want! 
    */ 

    // required for IE 
    if(ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); } 

    // get the file mime type using the file extension 
    switch(strtolower(substr(strrchr($file_name,'.'),1))) 
    { 
     case 'pdf': $mime = 'application/pdf'; break; 
     case 'zip': $mime = 'application/zip'; break; 
     case 'jpeg': 
     case 'jpg': $mime = 'image/jpg'; break; 
     default: $mime = 'application/force-download'; 
    } 
    header('Pragma: public'); // required 
    header('Expires: 0');  // no cache 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($file_name)).' GMT'); 
    header('Cache-Control: private',false); 
    header('Content-Type: '.$mime); 
    header('Content-Disposition: attachment; filename="'.basename($file_name).'"'); 
    header('Content-Transfer-Encoding: binary'); 
    header('Content-Length: '.filesize($file_name)); // provide file size 
    header('Connection: close'); 
    readfile($file_name);  // push it out 
    exit(); 

} 
+0

Mais cela signifie-t-il que simplement en naviguant sur cette page que l'utilisateur sera obligé de télécharger l'image? –

+0

Pas ce que vous auriez à faire est de changer votre lien d'image pour pointer vers ce fichier php envoyant via $ _GET ['fichier'] où l'image est. et puis oui le fichier sera forcé de télécharger – Brady

+0

C'est mediawiki, donc je ne suis pas sûr de pouvoir facilement manipuler les en-têtes http dans le contexte d'une extension mediawiki –

0

si vous souhaitez apparaître de dialogue de téléchargement, vous devez mettre les en-têtes spéciaux à votre image

en PHP il sera:

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=image.jpg'); 
header('Content-Transfer-Encoding: binary'); 
-1

Une autre solution serait d'ajouter à un fichier htaccess dans le dossier avec vos images:

AddType application/octet-stream .jpg

+0

Est-ce que cela ne forcerait pas que tous les fichiers jpg soient traités comme des binaires bruts? Je voudrais pouvoir aussi afficher les images dans le navigateur ... –

+0

oui cela forcerait toutes les images à être téléchargées. Avec cette solution, vous placez les images que vous voulez télécharger dans un dossier séparé et appliquez ce code uniquement dans ce dossier. Si vous ne pouvez pas le faire pour une raison quelconque, alors un PHP ou une solution similaire est le seul moyen. – Brady