我编写了以下PHP函数,但仍然提示下载该文件:
function navigateToBytes($contentType, $bytes){
header('Content-Type: ' .$contentType);
//header('Content-Transfer-Encoding: binary'); // UPDATE: as pointed out this is not needed, though it does not solve the problem
header('Content-Length: '.strlen($bytes));
ob_clean();
flush();
echo $bytes;
}
调用函数的一个例子:
navigateToBytes('image/jpeg', $bytes); // UPDATE: turns out this does work, using image/tiff for tiff images is when the browser does not display the image
其中$ bytes是从文件中读取的字节。
答案 0 :(得分:1)
最终,由浏览器决定是否可以显示您要发送的内容类型。
对于记录,我需要更改的唯一标题是
Content-Type,
我应该设置
Content-Length
除非我设置
Transfer-Encoding: chunked
答案 1 :(得分:0)
尝试使用HTTP标头" Content-Disposition: Inline
"但是有些浏览器可能会尝试保护用户不会看到二进制数据。这是一篇关于该HTTP标题的随机博客文章:
http://dotanything.wordpress.com/2008/05/30/content-disposition-attachment-vs-inline/
答案 2 :(得分:0)
这对我来说似乎是正确的行为。浏览器是人类查看内容的视口。人类大体上不想查看二进制数据。您认为应该怎么做?
随机建议:如果某个网站正在执行您想要执行的操作,请使用curl来嗅探他们发送的标头。
curl -I http://example.com/path/to/binary/file/that/displays/in/browser
然后在您自己的脚本中使用完全相同的标题。
答案 3 :(得分:0)
首先,摆脱HTTP(Content-Transfer-Encoding)中不存在的东西。
然后获取HTTP跟踪工具,例如Firefox的Live HTTP标头插件,并比较"您的"带有工作图像的标题。
有疑问,请在此处发布HTTP跟踪。