Я хочу использовать PHP в GAE для загрузки файлов файлов изображений.Использование PHP getimagesize и imagecreate с Google App Engine и облачным хранилищем Google
Перед сохранением, я хочу преобразовать каждый файл в JPEG и уменьшить его до качества миниатюр.
Используя следующий код (который полностью работает в обычной среде PHP, меньше настроек в виде ведра), я могу получать загрузки и определять временное имя и местоположение файла, но getimagesize создает ошибку при попытке доступ к CloudStorage.
$bucket = CloudStorageTools::getDefaultGoogleStorageBucketName();
$bucketPath = "gs://" . $bucket . "/" . $_SERVER["REQUEST_ID_HASH"] . "/";
$counter = 0;
foreach($_FILES["file"]["name"] as $idx => $tempFile) {
$counter++;
$sourceFile = $bucketPath . $tempFile;
syslog(LOG_DEBUG, $sourceFile);
$photoInfo = getimagesize($sourceFile);
if ($photoInfo["mime"] == "image/jpeg") {
$photoImage = imagecreatefromjpeg($sourceFile);
$valid = true;
}
elseif ($photoInfo["mime"] == "image/gif") {
$photoImage = imagecreatefromgif($sourceFile);
$valid = true;
}
elseif ($photoInfo["mime"] == "image/png") {
$photoImage = imagecreatefrompng($sourceFile);
$valid = true;
}
if (isset($valid)) {
$date = date("Y-m-d H:i:s");
$photoFolder = rtrim($photoFolder, "/") . "/";
$photoFile = "Test {$counter} {$date}.jpg";
$imageSaved = imagejpeg($photoImage, $photoFolder.$photoFile, 50);
syslog(LOG_DEBUG, "File saved is " . $imageSaved);
}
}
Первая запись системного журнала подтверждает путь и имя файла ...
gs://[myappid].appspot.com/AC3E3530/IMG_20160701_120144.jpg
Журнал ошибок показывает ошибку при попытке открыть поток, но я не знаю, как решить ее ,
PHP Warning: getimagesize(gs://[myappid].appspot.com/AC3E3530/IMG_20160701_120144.jpg): failed to open stream: "\google\appengine\ext\cloud_storage_streams\CloudStorageStreamWrapper::stream_open" call failed in /base/data/home/apps/s~[myappid]/v1.394746390020376247/code/server.php on line 169
У меня уже есть изменение этой функциональности, работающих на GAE с фотографиями, что мой сервер получает через Twilio (где processPhoto() является функцией идентичен коду I Выдержки выше). В этом случае я использую getimagesize и imagecreate с URL-адресом. Я просто не знаю, как сделать то же самое с CloudStorage.
if ($fetch && $numMedia > 0) {
for ($x = 0; $x < $numMedia; $x++) {
$sourceFile = $_REQUEST["MediaUrl" . $x];
$sid = $_REQUEST["MessageSid"];
processPhoto("sms", $projectID, $sourceFile, $caption, $sid, $mobile, $message);
}
}
Благодарим вас за ответ. Я изучил различия между службами и пришел к выводу, что я недостаточно быстро попадал в файл. Итак, как указано в моем ответе, я теперь переместите файл и оперируйте его в другом месте. –