[英]Downloading files using google-api-php-client
我在尝试使用https://code.google.com/p/google-api-php-client/上的php客户端从Google云端存储下载文件时遇到问题
我已经验证了自己的确定并使用以下代码我可以返回一个包含我的文件的链接的对象
$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);
回应就像......
{
"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.........."
}
但是如何使用Google PHP客户端下载文件...我不能使用file_get_contents,因为它不知道身份验证详细信息。 我发现的最好的东西是使用Google_Client,但响应只包含元数据而没有对象/文件内容
$request = new Google_HttpRequest($object['selfLink']);
$response = $this->client->getIo()->authenticatedRequest($request);
老问题,但它让我看向正确的方向。 selfLink
是元数据请求的链接,您需要mediaLink
来获取实际的对象数据,它是getAuth
而不是getIo
。
此脚本将输出文件内容(假设您已初始化$client
对象):
$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();
这是无效的apiclient〜2.0,看到UPGRADING.md文件在github上。
使用apiclient~2.0的工作代码应该是:
$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();
或授权现有的Guzzle客户:
$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();
对于下载文件,您需要授予所有用户的READER访问权限(您可以从谷歌网络控制台或使用谷歌php api)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.