2010-07-02 14 views
6

Podstawowy problem jest następujący: Mam link do pliku obrazu. Pożądanym zachowaniem po kliknięciu linku jest pobranie okna dialogowego pobierania, które umożliwi mi uruchomienie powiązanego edytora obrazów. Nie dzieje się tak, ponieważ obraz jest renderowany przez przeglądarkę.Znacznik pobierania html

Czy istnieje jakaś magia html, której mogę użyć, aby zmusić przeglądarkę do zaoferowania okna dialogowego pobierania, gdy użytkownik kliknie link?

Każda pomoc lub wskazówki byłyby mile widziane.

Odpowiedz

3

Dwa podej:

  1. Korzystanie Data URIs w href z tagiem kotwicy:

    <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. W niektórych konkretnych przeglądarek, takich jak Google Chrome i Firefox, można zrobić:

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

0

Niemożliwe z samym HTML, jednak można wymusić pobranie pliku poprzez modyfikowanie nagłówków za pomocą języka po stronie serwera, takiego jak 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

Ale czy to oznacza, że ​​po prostu przechodząc do tej strony, użytkownik zostanie zmuszony do pobrania obrazu? –

+0

Nie trzeba nic robić, aby zmienić link do obrazu, aby wskazywał na wysyłanie pliku php za pomocą $ _GET ["plik"], w którym znajduje się obraz. a następnie tak, plik będzie zmuszony do pobrania – Brady

+0

To jest mediawiki, więc nie jestem pewien, czy mogę łatwo manipulować nagłówkami http z kontekstu rozszerzenia mediawiki. –

0

jeśli chcesz pokazać się okno pobierania, należy umieścić specjalne nagłówki obrazu

w PHP będzie:

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

Innym rozwiązaniem byłoby dodać do plik .htaccess w folderze z obrazami:

AddType application/octet-stream .jpg

+0

Czy nie zmusiłoby to wszystkich plików jpg do traktowania jako surowego pliku binarnego ?, chciałbym móc renderować obrazy również w przeglądarce ... –

+0

Tak, to wymusiłoby pobranie wszystkich obrazów. Dzięki takiemu rozwiązaniu obrazy, które chcesz wymusić, zostaną umieszczone w oddzielnym folderze i zastosują ten kod tylko do tego folderu. Jeśli nie możesz tego zrobić z jakiegokolwiek powodu, to jedynym rozwiązaniem jest PHP lub podobne rozwiązanie. – Brady

Powiązane problemy