如何向浏览器"提示"文件名以将动态图像保存到磁盘?

Lig*_*ica 2 php http

可能重复:
如何将"另存为..."对话框中显示的文件名从.php更改为.png

我的PHP生成的GUI显示动态生成的PNG图像:

<img src="someScript.php?dataId=xyz&width=250&height=200" alt="Chart" />
Run Code Online (Sandbox Code Playgroud)

根据参数,图像内容是动态且唯一的dataId:

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

但是当我的用户尝试右键单击并在IE,Firefox或Chrome中另存为时,建议的文件名为someScript.php.png.这不是唯一的,也不是很有用.

如何"浏览"浏览器"保存为"文件名应该是什么?

浏览器总是可以做他们喜欢的事情,但是HTTP设置的先例Content-Disposition: attachment; filename=<filename>意味着我可能会有一些暗示文件名的方法.此HTTP标头本身不合适,因为我希望Content-Disposition保持默认值inline.

Lig*_*ica 7

filename说法也支持Content-Disposition: inline:

[RFC6266]:4.3.处理参数:'文件名'

参数"filename"和"filename*",不区分大小写,提供有关如何构造用于存储消息有效负载的文件名的信息.

根据处置类型,可以立即使用此信息(在"附加"配置类型导致的"另存为..."交互中),或稍后(例如,当用户决定保存内容时)当前页面正在显示).

所以:

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

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

// output image based on $_GET['dataId']
?>
Run Code Online (Sandbox Code Playgroud)