我们最近在我们的网站上实施了Amazon S3,这使我们改变了处理图像的方式.我们曾经调用一个控制器/fotos.php,它将从磁盘读取文件,记录一些统计信息,设置标题并将文件内容作为image/jpeg返回.
一切顺利,直到S3.Fotos.php现在执行302重定向到亚马逊的资源,一切都很好,但是你无法在Firefox中保存图像,因为它将文件类型设置为.htm.我发现了这个问题,这似乎是Firefox中的一个错误:
https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/207670
这是一个显示问题的URL(尝试保存大图像):
http://www.viajeros.com/fotos/el-gran-lago-de-atitlan-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.
这不是一个错误
S3本身不知道你存储的对象是什么mimetype.当您PUT在S3中的对象,你还需要包括的内容类型和内容处置标题(和其他任何你可能想).执行此操作时,当您或其他任何人获取对象时,S3将使用这些标头值进行响应