2014-12-26 2 views
0

У меня есть сценарий php GAE, который вращает данное изображение (хранится в GCS), а затем записывает его в тот же самый GCS, из которого он происходит (все в одном Облаке Платформенный проект).imagejpeg, вызывающий тип файла 'binary/octet-stream' в 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 ...

ответ

2

Вы можете указать тип содержимого в контекстных параметрах, в этом случае вам нужно будет установить его в параметрах по умолчанию, поскольку нет способа пройти контекст к методу 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); 
} 
+0

Спасибо! Прекрасно работает – Eran

Смежные вопросы