imagejpeg导致GCS中的文件类型为“binary / octet-stream”

时间:2014-12-26 19:44:12

标签: php google-app-engine google-cloud-storage

我有一个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中不可用......

1 个答案:

答案 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);
}