2009-12-22 144 views
2

因此,我寫了一個圖像庫,其中包含一個用於下載原始圖像的選項(默認情況下,它顯示圖像的大小調整後的版本)。我很想知道如何爲我如何強制用戶下載圖像(如下載pdf)?

下面的代碼將強制用戶保存pdf,而不是瀏覽器查看它,我很想通過綁定點擊實現圖像(JPG,GIF,PNG)相同的效果與jQuery的行動,我將如何能夠做到這一點?

從php.net兩者

<?php 
// We'll be outputting a PDF 
header('Content-type: application/pdf'); 

// It will be called downloaded.pdf 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 

// The PDF source is in original.pdf 
readfile('original.pdf'); 
?> 

HTML:

<div class="download"> 
<a href="http://www.xyz/abc.jpg"> 
    Download original image</a> 
</div> 

JS:

$(".download").click(function(){ 
    // call a php to download the image 
}); 

是否可以這樣做呢?

編輯:我應該在JavaScript代碼中做什麼?

回答

3

這是可能的。服務器(PHP腳本)需要發送Content-Disposition標頭,如第一個片段所示。例如:

header('Content-Disposition: attachment; filename="abc.jpg"'); 
+0

感謝您的快速響應。我剛剛更新了我的問題。我想知道JavaScript代碼,而不是PHP。 – John

+0

如果您正在調用一個PHP頁面來實際提供圖像,那麼在PHP中執行它有什麼問題? –

+0

但是,如果文件名中包含特殊字符,則在IE上會失敗。 而@Alix Axel:跆拳道是你在加強? – Frunsi

1

一般的決定,顯示或下載由基於MIME類型的瀏覽器發出。所以我覺得這是你想要什麼:

如果你只是想強制下載 使用header()函數來設置 內容類型是 應用程序/八位字節流。

Internet Explorer的MIME類型支持 已損壞,因此它不會對上面的 做出反應。但是,如果您另外使用 使用Content-Disposition標題,則 也可以強制MSIE 5下載 文件。

此標頭還允許您指定 文件名。這適用於 Netscape和MSIE 5。

header(「Content-Disposition: attachment; filename = \」myfile.abc \「」);

編輯:這裏的一些有趣的信息,雖然它可能不相關的具體使用情況:

如果滿足下列條件爲真會發生此問題:

中的文件名內容 配置標題使用雙字節 字符集(DBCS)字符,例如 作爲日語字符。 DBCS字符中的任何一個的第二個 字節或「trailbyte」包含的值爲 表示ASCII中的文件系統保留的 個字符。例如, 「trailbyte」包含值 表示ASCII值,如0x5c或 0x7c。

編輯2:如果你只在客戶端上這樣做有興趣,這是在這裏找到答案:Force Mime Type in Browser (with Javascript)

+0

我應該說我不需要支持IE 6或更低版本,上面的聲明是否適用於IE 7 +? – John

+0

我相信它沒有改變 - 讓我知道如果它不適合你 – danben

2

這是可能的,但IE(一個驚喜......)有個微妙的問題:

<?php 
header('Content-Type: ' . $your_content_type . '; charset=UTF-8'); 
if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE') !== false) header('Content-Disposition: attachment; filename="'.rawurlencode($your_filename).'"'); 
else header('Content-Disposition: attachment; filename="'.addslashes($your_filename).'"'); 
?> 

編輯:沒有什麼更在JavaScript做!只要讓用戶點擊圖片的網址,或者添加一個點擊處理程序,即可將瀏覽器發送到圖片網址! 在客戶端/瀏覽器端,您無法決定是否下載或顯示URL!