Аутентификация Google Cloud Storage выдает ошибки - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь написать скрипт, который позволит мне загружать файлы в Google Storage.Вот что я получил до сих пор:

define("PROJECT_ID", "my-project");
define("BUCKET_NAME", "my-bucket");

require '../../vendor/autoload.php';

use Google\Cloud\Storage\StorageClient;

// Authenticating with a keyfile path.
$storage = new StorageClient([
    'keyFilePath' => '../../my-keyfile.json'
]);

// Providing the Google Cloud project ID.
$storage = new StorageClient([
    'projectId' => PROJECT_ID
]);

$bucket = $storage->bucket(BUCKET_NAME);

$uploadFile = '../fileTest.txt';

$bucket->upload(
    fopen($uploadFile, 'r')
);

Я получаю следующую ошибку:

Fatal error: Uncaught Google\Cloud\Core\Exception\ServiceException: { "error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Invalid Credentials" } } in /home/domain/vendor/google/cloud/Core/src/RequestWrapper.php:362 Stack trace: #0 /home/domain/vendor/google/cloud/Core/src/RequestWrapper.php(206): Google\Cloud\Core\RequestWrapper->convertToGoogleException(Object(GuzzleHttp\Exception\ClientException)) #1 /home/domain/vendor/google/cloud/Core/src/Upload/MultipartUploader.php(64): Google\Cloud\Core\RequestWrapper->send(Object(GuzzleHttp\Psr7\Request), Array) #2 /home/domain/vendor/google/cloud/Storage/src/Bucket.php(285): Google\Cloud\Core\Upload\MultipartUploader->upload() #3 /home/domain/public_html/dev/incl/test.php(39): Google\Cloud\Storage\Bucket->upload(Resource id #60) #4 /home/domain/public_html/dev/index.php(42): include_once('/hom in /home/domain/vendor/google/cloud/Core/src/RequestWrapper.php on line 362

Я проверил, чтобы убедиться, что следующие файлы существуют, и они делают:

  • my-keyfile.json
  • fileTest.txt

Чего мне не хватает?

1 Ответ

4 голосов
/ 16 мая 2019

Создайте учетные данные JSON из IAM->Service accounts и предоставьте разрешения администратора хранилища.

Set GOOGLE_APPLICATION_CREDENTIALS by export GOOGLE_APPLICATION_CREDENTIALS="YOUR-my-keyfile.json"

Или обновите ваш код:

$storage = new StorageClient([
    'keyFilePath' => '../../my-keyfile.json'
]);

// Providing the Google Cloud project ID.
$storage = new StorageClient([
    'projectId' => PROJECT_ID
]);

до

$storage = new StorageClient([
    'keyFilePath' => '../../my-keyfile.json',
    'projectId' => PROJECT_ID
]);
...