2010-07-02 29 views
6

Vấn đề cơ bản là: Tôi có một liên kết đến một tập tin hình ảnh. Các hành vi mong muốn khi tôi nhấp vào liên kết là để có được hộp thoại tải về mà sẽ cho phép tôi để khởi động một trình soạn thảo hình ảnh liên quan. Điều này không xảy ra vì tệp hình ảnh được trình duyệt hiển thị.html download tag

Có bất kỳ phép thuật html nào mà tôi có thể sử dụng để buộc trình duyệt cung cấp hộp thoại tải xuống khi người dùng nhấp vào liên kết không?

Bất kỳ trợ giúp hoặc con trỏ nào sẽ được đánh giá cao.

Trả lời

3

Hai phương pháp tiếp cận:

  1. Sử dụng Data URIs trong href của một thẻ neo:

    <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. Trong một số trình duyệt cụ thể, như Google Chrome và Firefox, bạn có thể làm:

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

0

Không thể chỉ với HTML tuy nhiên bạn có thể buộc tải tệp xuống qua sửa đổi tiêu đề bằng ngôn ngữ phía máy chủ chẳng hạn như 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

Nhưng điều đó có nghĩa là chỉ cần điều hướng đến trang này mà người dùng sẽ buộc phải tải xuống hình ảnh? –

+0

Không có gì bạn phải làm là thay đổi liên kết hình ảnh của bạn để trỏ đến tập tin php này gửi qua $ _GET ['file'] nơi mà hình ảnh được. và sau đó có tập tin sẽ bị buộc phải tải xuống – Brady

+0

Đó là mediawiki, vì vậy tôi không chắc tôi có thể dễ dàng thao tác các tiêu đề http từ ngữ cảnh của phần mở rộng mediawiki –

0

nếu bạn muốn hiển thị hộp thoại tải về, bạn cần phải đặt tiêu đề đặc biệt để hình ảnh của bạn

trong PHP nó sẽ là:

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

giải pháp sẽ được để thêm video này tệp htaccess trong thư mục có hình ảnh của bạn:

AddType application/octet-stream .jpg

+0

Nó sẽ không buộc tất cả các tệp jpg được coi là nhị phân thô ?, Tôi muốn có thể hiển thị hình ảnh trong trình duyệt ... –

+0

có, nó sẽ buộc tất cả hình ảnh phải được tải xuống. Với giải pháp này, bạn sẽ đặt những hình ảnh mà bạn muốn buộc phải tải xuống vào một thư mục riêng biệt và chỉ áp dụng mã này cho thư mục đó. Nếu bạn không thể làm điều này vì lý do nào thì một giải pháp PHP hoặc tương tự là cách duy nhất. – Brady