Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Downloading files using google-api-php-client

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);
like image 420
Carlton Avatar asked Nov 03 '22 17:11

Carlton


1 Answers

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();
like image 152
bmcgavin Avatar answered Nov 09 '22 06:11

bmcgavin