2013-01-09 49 views
2

可能重複:
How to change the filename displayed in the 「Save as…」 dialog from .php to .png如何向瀏覽器「提示」將動態圖像保存到磁盤的文件名?

我的PHP生成的GUI顯示動態生成的PNG圖像:

<img src="someScript.php?dataId=xyz&width=250&height=200" alt="Chart" /> 

的圖像內容是動態的和獨特的基於所述dataId參數:

<?php 
header('Content-Type: image/png'); 
// output image based on $_GET['dataId'] 
?> 

但是,當我的用戶嘗試在IE,Firefox或Chrome中右鍵單擊並另存爲時,建議的文件名是someScript.php.png。這是非獨特的,不是很有用。

如何向瀏覽器「提示」「另存爲」文件名應該是什麼?

瀏覽器可以隨時做他們喜歡的事情,但HTTP Content-Disposition: attachment; filename=<filename>設置的先例暗示我可能有某種方式暗示文件名。此HTTP頭本身並不合適,因爲我希望Content-Disposition保持在the default of inline

回答

7

filename參數is also supportedContent-Disposition: inline

[RFC6266]4.3。處理參數:'文件名'

參數「文件名」和「文件名*」,將大小寫不區分大小寫,提供有關如何構建文件名以存儲消息有效負載的信息。

根據部署類型,這些信息可能被用來馬上(在「另存爲...」相互作用引起的對「附件」配置型),或在(例如,當後來用戶決定保存當前正在顯示的頁面的內容)。

所以:

<?php 
$filename = "image_" . $_GET['dataId'] . ".png"; 

header("Content-Type: image/png"); 
header("Content-Disposition: inline; filename=\"{$filename}\""); 

// output image based on $_GET['dataId'] 
?> 
+1

沒錯,但不要指望所有的瀏覽器來處理這個。請參閱http://greenbytes.de/tech/tc2231/#inlwithasciifilename –