I got some problem while managing migration from PHP5 to PHP7.
Actually, what I was doing with php5, to get an URL where upload a file, was something like this:
JavaScript
x
$options = [ 'gs_bucket_name' => 'mybucket.appspot.com' ];
$myvar = $_GET['myvar'];
$upload_url = CloudStorageTools::createUploadUrl($myvar, $options);
return $upload_url;
I’ve uploaded the library and now I’m trying to use
GoogleCloudStorageStorageClient
I’ve converted the code above to something like this:
JavaScript
$bucketName = 'mybucket.appspot.com';
$objectName = $_GET['myvar'];
$storage = new StorageClient([
'scopes' => [
'https://www.googleapis.com/auth/iam',
'https://www.googleapis.com/auth/devstorage.full_control',
]
]);
$bucket = $storage->bucket($bucketName);
$object = $bucket->object($objectName);
$upload_url = $object->signedUrl(
new DateTime('90 min'),
[
'version' => 'v4',
]
);
return $upload_url;
I got a 403 FORBIDDEN error
JavaScript
Fatal error: Uncaught GuzzleHttpExceptionClientException: Client error: `POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/myproject@appspot.gserviceaccount.com:signBlob?alt=json` resulted in a `403 Forbidden` response:
{
"error": {
"code": 403,
"message": "IAM Service Account Credentials API has not been used in project 123456 (truncated...)
.
Some suggestions? In the PHP5 version upload is working (with the older code), so I suppose my app angine service account has the correct permissions setted.
Thanks
Advertisement
Answer
Solved by passing .json file for authentication.
JavaScript
$storage = new StorageClient([
'projectId' => "my_project",
'keyFilePath' => 'key/serviceaccount.json',
]);