我有一个GAE php脚本,它可以旋转给定的图像(存储在GCS中),然后将其写入源自它的同一个GCS存储桶(所有这些存储在同一个Cloud Platform项目中)。
一切正常 - 图像正确加载,旋转并保存。问题是,当图像被保存时,GCS将其识别为binary/octet-stream
而不是image/jpeg
,这会导致任何公共链接自动下载图像文件而不是直接在浏览器。
代码:
$bucket = 'gs://my-bucket-here/';
$imageRes = imagecreatefromjpeg($bucket . $picName);
if ($imageRes) {
$rotate = imagerotate($imageRes, 90, 0);
imagedestroy($imageRes);
imagejpeg($rotate, $bucket . "test.jpg");
imagedestroy($rotate);
}
有什么暗示导致这个?我想过使用Imagick,但它在GAE中不可用......
答案 0 :(得分:1)
您可以在上下文选项中指定内容类型,在这种情况下,您需要在默认选项中设置它,因为无法将上下文传递给imagejpeg()
方法。
$options = [
'gs' => [
'Content-Type' => 'image/jpeg',
],
];
stream_context_set_default($options);
$bucket = 'gs://my-bucket-here/';
$imageRes = imagecreatefromjpeg($bucket . $picName);
if ($imageRes) {
$rotate = imagerotate($imageRes, 90, 0);
imagedestroy($imageRes);
imagejpeg($rotate, $bucket . "test.jpg");
imagedestroy($rotate);
}