Загрузка хранилища Firebase Переполнение стека

В настоящее время я пытаюсь загрузить данные в Firebase Cloud Storage с помощью php, но столкнулся с проблемой.

У меня есть форма в формате HTML, которая берет загруженный файл (в моем случае изображение) и передает его в файл php.

Это изображение очень маленького размера, 12,8 КБ, и изображение JPEG.

Файл php берет изображение и пытается загрузить его в хранилище.
Мой текущий код PHP примерно:

$storage = new StorageClient(['projectId' => '<my_project_id> ']);
$bucket = $storage->bucket('images');
$bucket->upload($_FILES['imageToUpload']['tmp_name']);

Я могу заставить его напечатать название контейнера и его детали, так что я знаю, что это не та часть, которая вызывает ошибку.

Я получаю ошибку,

Fatal error: Uncaught InvalidArgumentException: A name is required when data is of type string or null.
in /var/www/html/Images/vendor/google/cloud-storage/src/Bucket.php:258
Stack trace: #0 /var/www/html/Images/uploadImage.php(74): Google\Cloud\Storage\Bucket->upload('/tmp/phpA9SAM8')
#1 {main} thrown in /var/www/html/Images/vendor/google/cloud-storage/src/Bucket.php on line 258

О, я также работаю над 16.04 Ubuntu, если это имеет значение, с apache2. (Но я смог загрузить на свой компьютер с php. Просто рефакторинг для использования Firebase сейчас)

РЕДАКТИРОВАТЬ:
Когда я изменил свой код, чтобы быть

$bucket->upload(
file_get_contents($_FILES['imageToUpload']['tmp_name']),
[
'name' => $_FILES['imageToUpload']['name']
]
);

Я получаю ошибку:

Fatal error: Uncaught Google\Cloud\Core\Exception\NotFoundException: { "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "Not Found" } ], "code": 404, "message": "Not Found" } } in /var/www/html/Images/vendor/google/cloud-core/src/RequestWrapper.php:263
Stack trace: #0 /var/www/html/Images/vendor/google/cloud-core/src/RequestWrapper.php(168): Google\Cloud\Core\RequestWrapper->convertToGoogleException(Object(GuzzleHttp\Exception\ClientException))
#1 /var/www/html/Images/vendor/google/cloud-core/src/Upload/MultipartUploader.php(64): Google\Cloud\Core\RequestWrapper->send(Object(GuzzleHttp\Psr7\Request), Array)
#2 /var/www/html/Images/vendor/google/cloud-storage/src/Bucket.php(268): Google\Cloud\Core\Upload\MultipartUploader->upload()
#3 /var/www/html/Images/uploadImage.php(75): Google\Cloud\Storage\Bucket->upload('/tmp/phpR2vYYg', Array)
#4 {main} thrown in /var/www/html/Images/vendor/google/cloud-core/src/RequestWrapper.php on line 263

0

Решение

Используя $_FILES['imageToUpload']['tmp_name'], вы используете временное имя загруженного изображения в качестве содержимого, а не фактический файл изображения.

Самый быстрый способ решить эту проблему — использовать:

$bucket->upload(
file_get_contents($_FILES['imageToUpload']['tmp_name']),
[
'name' => $_FILES['imageToUpload']['name']
]
);

upload Метод принимает массив опций (включая имя целевого файла), как описано в PHPDoc метода: https://github.com/GoogleCloudPlatform/google-cloud-php/blob/master/Storage/src/Bucket.php#L216

Пожалуйста, имейте в виду, что при использовании имени загруженного файла существуют последствия для безопасности (не tmp_name) непосредственно, поэтому, пожалуйста, не забудьте проверить и обработать загруженные файлы, прежде чем перемещать их в облачное хранилище.

http://php.net/manual/en/features.file-upload.post-method.php
http://php.net/manual/en/function.move-uploaded-file.php

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]