imagejpeg 导致 GCS 中的文件类型“二进制/八位字节流”


imagejpeg causing file type 'binary/octet-stream' in GCS

我有一个GAE php脚本,它旋转给定的图像(存储在GCS中),然后将其写入它源自的同一GCS存储桶(都在同一个云平台项目中)。

一切正常 - 图像正确加载、旋转并保存。问题是,当保存图像时,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 中不可用......

您可以在上下文选项中指定内容类型,在这种情况下,您需要在默认选项中设置它,因为无法将上下文传递给 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);
}