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

时间:2013-01-09 15:38:18

标签: php http

  

可能重复:
  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

1 个答案:

答案 0 :(得分:7)

is also supportedfilename参数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']
?>