图片没有在IE中显示,firefox / chrome /其他很好!

时间:2010-12-06 15:29:36

标签: php http http-headers

我需要使用This Class从我使用的文章编写网站服务多个文件(img / video / mp3),唯一且主要的问题是:   文章中的所有图像都应该由该类显示,并且该类不显示图像(通过URL调用时启动下载)。 我设法通过删除此行(可能是第107行)来修复此问题

header('Content-Disposition:attachment; filename="'.$this->properties["name"].'";');

在显示chrome和firefox的图像方面很好,但IE仍然开始下载:(。

有什么方法/标题可以解决这个问题吗?

修改:

我在元类型中添加了以下内容:

case "jpg": $content_type="image/".$file_extension; break; 
case "gif": $content_type="image/".$file_extension; break; 
case "png": $content_type="image/".$file_extension; break; 

2 个答案:

答案 0 :(得分:0)

我的猜测是IE仍然需要一个有效的Content-Type标头(假设该类没有为图像提供一个,因为它只是强制下载)。可能需要更改这段代码:

switch( $file_extension ) { // the file type
  case "mp3": $content_type="audio/mpeg"; break;
  case "mpg": $content_type="video/mpeg"; break;
  case "avi": $content_type="video/x-msvideo"; break;
  case "wmv": $content_type="video/x-ms-wmv";break;
  case "wma": $content_type="audio/x-ms-wma";break; 
  default: $content_type="application/force-download";
} 

并添加图片扩展名及其相关的MIME类型。

答案 1 :(得分:0)

Content-Disposition 设置为附件实际上是用于不直接显示资源:

  

Bodyparts可以被指定为“附件”,表示它们与邮件主体分开,并且它们的显示不应该是自动的,而是取决于用户的一些进一步操作。

但是虽然Content-Disposition header field是MIME的一部分而不是HTTP的一部分,但它“已被提议作为原始服务器建议默认文件名的手段,如果用户请求将内容保存到文件。“(见HTTP/1.1 – 19.5 Additional Features

除此之外,建议使用特殊媒体类型 application / octet-stream 来暗示下载:

  

如果在带有application / octet-stream内容类型的响应中使用此标头,则隐含的建议是用户代理不应显示响应,而是直接输入“save response as ...”对话框。

但是,由于您希望直接显示资源,请改为使用 Content-Disposition 内联。使用此功能,您还可以使用 filename 参数指定与URL不同的文件名。

有关用于编码 filename 参数的编码的更多信息,另请参阅Julian Reschke’s Test Cases for HTTP Content-Disposition header field and the Encodings defined in RFC 2047 and RFC 2231/5987