我们最近在我们的网站而导致我们改变我们处理图像的方式来实现的Amazon S3。我们习惯叫控制器/fotos.php会从磁盘中读取文件,记录一些统计数据,设置头并返回文件作为一个image / jpeg的内容。

一切都很OK,直到S3。 Fotos.php现在做了302重定向到亚马逊的资源和所有是好的和工作,而是因为它会将其文件类型的.htm无法保存在Firefox中的形象。我发现对此事的讨论,似乎像在Firefox中的错误:

https://bugs.launchpad.net/ubuntu /+source/firefox-3.0/+bug/207670

下面是呈现问题(尽量节省大图像)的URL:

的http:// WWW .viajeros.com /照片/ EL-格兰-的Lago-脱阿蒂特兰-Y-SUS-volcanes / 132968

的Internet Explorer 6至少尝试将其保存为Untitled.BMP。

下面是的代码段中,我们使用fotos.php:

$archivo = $fotos->ObtenerPathFotoAmazon( $url, null );

if (empty($_GET['nocache'])) {
    header('HTTP/1.0 302 Found');
    header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT");
    header("Cache-Control: max-age=315360000");
} else {
    header('HTTP/1.0 307 Temporary Redirect');
}

header('Location: ' . AWS_BUCKET_URL . $archivo);
die;

你知道解决类似的问题?

编辑:我们使用CloudFront的以及

有帮助吗?

解决方案

尝试与指定的图像的内容类型 header('Content-Type: image/jpeg');header('Content-Type: image/png');

也许你将不得不使用内容处置附件让PHP指定内容类型(位置离开任务到Web服务器)

$archivo = $fotos->ObtenerPathFotoAmazon( $url, null );

if (empty($_GET['nocache'])) {
   header('HTTP/1.0 302 Found');
   header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT");
   header("Cache-Control: max-age=315360000");
} 

header('Content-Type: image/jpeg');
header("Content-Disposition: attachment; filename='$archivo'");
readfile(AWS_BUCKET_URL .$archivo);
die();

其他提示

这不是一个错误

S3本身不知道什么MIME类型你存储的对象。当您 PUT 在S3您需要的对象还包括内容类型内容处置头(您可能需要任何其他)。当这样做时,S3将与这些头的值做出响应时,或其他任何人,获取的对象

由于该错误不局限于火狐(IE还试图将其保存为错误的类型,但它至少实现它的一个图像),我猜想,S3被用于返回错误mime类型文件。

当人们问这在其他论坛我点他们在这个脚本方向。你不必使用所有的它,但它的一个不错的指针在正确的方向。

我不会写更多的人已经回答了这个不够好。

我就遇到了这个问题,我自己一次。我认为,它的唯一的真正的解决方法(在当时)是追加类似“#.JPG”,将该网址的结尾。这不应该影响你的处理和将迫使FF到设置下载类型为JPG。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top