Как загрузить файлы на локальный хост Google App Engine под управлением PHP 7.2? - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь реализовать возможность для пользователя загружать изображение.Я сохраню это изображение в Google Storage.Затем я буду использовать GoogleStorageTools, чтобы получить общедоступный URL-адрес для изображения, чтобы я мог отобразить его на своем сайте.

Мне нужно проверить это на локальном хосте.Когда я ранее использовал php5.5, я мог использовать dev_appserver.py, и это имитировало бы интеграцию gs:// и позволяло бы мне создавать и взаимодействовать с файлами, как если бы я работал в облаке.

Однако,Я использую php7.2 для этого приложения, которое не может использовать dev_appserver.py, мне просто нужно запустить встроенный веб-сервер php.Когда я пытаюсь загрузить файл, я получаю сообщение об ошибке Google Storage.Это код в моем скрипте, который получает сообщение с загруженным файлом:

$storage = new StorageClient();
$storage->registerStreamWrapper();

$basefilename = uniqid().'-'.sanitize_string($_FILES['imagefile']['name']);

$gsfilepath = 'gs://#default#/images/'.$basefilename;

if ( ! move_uploaded_file($_FILES[ 'imagefile' ]['tmp_name'], $gsfilepath)) {
    error_log('Failed to move uploaded file. ' . $_FILES[ 'imagefile' ]['tmp_name'] . ' => ' . $gsfilepath);
}

Это ошибки, которые я получаю, когда пытаюсь запустить код move_uploaded_file():

Google \ Cloud \ Core \ Exception \ NotFoundException: ошибка клиента: POST https://www.googleapis.com/upload/storage/v1/b//o?uploadType=resumable привел к ответу 404 Not Found: не найден в / Users / kenny / myproject / trunk / server / gae / vendor / google / cloud-core / src/RequestWrapper.php в строке 263

Неустранимая ошибка: Uncaught Google \ Cloud \ Core \ Exception \ NotFoundException: ошибка клиента: POST https://www.googleapis.com/upload/storage/v1/b//o?uploadType=resumable привел к ответу 404 Not Found: не найден в / Users / kenny / myproject/trunk/server/gae/vendor/google/cloud-core/src/RequestWrapper.php в строке 263

Предупреждение: move_uploaded_file (): невозможно переместить '/ private / var / folder / 1k / 8xt74j593ss9yxbtqrv9p4000000T / phpKsSN6q 'to' gs: //#default#/images/5c1be56fd752d-hold-on-to-your-butts.png 'в /Users/kenny/myproject/trunk/server/gae/testupload-upload.php налиния 11

1 Ответ

0 голосов
/ 20 декабря 2018

Имя корзины #default# недопустимо в Оболочке Stream Storage Cloud.Как видно из ошибки, в URI, на который публикуется библиотека, отсутствует идентификатор корзины.

Чтобы понять, почему, обратитесь к методу StreamWrapper::openPath() в google/cloud-storage.

Имя сегмента представляется как ключ host в возвращаемом значении parse_url.Как показано ниже, предоставляемый вами URI gs приводит к сбою parse_url:

php > $url = 'gs://#default/foo';
php > var_dump(parse_url($url));
bool(false)

Я предполагаю, что #default# - помощник, который работает при определенных обстоятельствах.Попробуйте указать реальный идентификатор корзины в URI GS.

...