Reputation: 5721
I'm having an issue trying to download a file from Google Cloud Storage using the php client found at https://code.google.com/p/google-api-php-client/
I have authenticated myself ok and using the following code I can return an object which contains the link to my file
$this->storageService = new Google_StorageService($this->client);
$this->objects = $this->storageService->objects;
$options = array(
'prefix' => 'REPORT_NAME_2013-07-01'
);
$bucket_contents = $this->objects->listObjects($bucket, $options);
The response is something like...
{
"kind": "storage#object",
"id": "<bucket>/<report>.csv/1001",
"selfLink": "https://www.googleapis.com/storage/v1beta2/b/<bucket>/o/<report>.csv",
"name": "<report>.csv",
"bucket": "<bucket>",
"generation": "1001",
"metageneration": "1",
"contentType": "application/csv",
"updated": "2013-07-22T10:21:08.811Z",
"size": "806",
"md5Hash": "wT01i....",
"mediaLink": "https://www.googleapis.com/storage/v1beta2/b/<bucket>/o/<report>.csv?generation=1001&alt=media",
"owner": {
"entity": "user-00b........",
"entityId": "00b490......."
},
"crc32c": "8y........",
"etag": "CPjZ.........."
}
But how do I go about downloading the file using the Google PHP client...I can't use a file_get_contents as it has no knowledge of the authentication details. The best thing I have found is something that uses the Google_Client but the response simply contains meta data and no object/file content
$request = new Google_HttpRequest($object['selfLink']);
$response = $this->client->getIo()->authenticatedRequest($request);
Upvotes: 5
Views: 2682
Reputation: 1
This is not valid for apiclient ~2.0, see UPGRADING.md file in github.
Working code with apiclient ~2.0 should be:
$service = new Google_Service_Storage($client);
$object = $service->objects->get('bucketname', 'objectname');
// create an authorized HTTP client
$httpClient = $client->authorize();
$response = $httpClient->request('GET', $object->getMediaLink());
echo $response->getBody();
or authorizing an existing Guzzle client:
$service = new Google_Service_Storage($client);
$object = $service->objects->get('bucketname', 'objectname');
// add authorization to an existing client
$httpClient = new GuzzleHttp\Client();
$httpClient = $client->authorize($httpClient);
$response = $httpClient->request('GET', $object->getMediaLink());
echo $response->getBody();
Upvotes: 0
Reputation: 203
Old question, but it got me looking in the right direction. selfLink
is the link to the metadata request, you need mediaLink
to get the actual object data, and it's getAuth
rather than getIo
.
This script will output the file contents (given you have already initialised a $client
object) :
$service = new Google_Service_Storage($client);
$object = $service->objects->get('bucketname', 'objectname');
$request = new Google_Http_Request($object->getMediaLink());
$response = $client->getAuth()->authenticatedRequest($request);
echo $response->getResponseBody();
Upvotes: 5
Reputation: 19
for downloading file, you need grant READER access to allUsers (you can do it from google web console or use google php api)
Upvotes: -3