3

可能重复:
如何将“另存为...”对话框中显示的文件名从 .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.

4

1 回答 1

9

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']
?>
于 2013-01-09T15:38:17.720 回答