我怎么能";提示“;向浏览器提供用于将动态图像保存到磁盘的文件名


How can I "hint" to browsers a filename for saving a dynamic image to disk?

可能重复:
如何将"另存为…"对话框中显示的文件名从.php更改为.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保持在默认的inline

Content-Disposition: inline:也支持filename参数

[RFC6266]:4.3。处置参数:"Filename">

参数";文件名";以及";文件名*";,要区分大小写匹配,请提供有关如何构造用于存储消息有效载荷的文件名的信息。

根据处理类型,此信息可能会立即使用(在"附件"处理类型引起的"另存为…"交互中(,或稍后使用(例如,当用户决定保存当前显示页面的内容时(

因此:

<?php
$filename = "image_" . $_GET['dataId'] . ".png";
header("Content-Type: image/png");
header("Content-Disposition: inline; filename='"{$filename}'"");
// output image based on $_GET['dataId']
?>