Загрузка файлов с помощью google-api-php-client

У меня возникла проблема с загрузкой файла из Google Cloud Storage с помощью php-клиента, найденного по адресу https://code.google.com/p/google-api-php-client/

Я аутентифицировал себя нормально и используя следующий код, я могу вернуть объект, содержащий ссылку на мой файл

$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-клиента … Я не могу использовать файл_get_contents, так как он не знает сведений об аутентификации. Лучшая вещь, которую я нашел, – это то, что использует Google_Client, но ответ просто содержит метаданные и содержимое объекта / файла

 $request = new Google_HttpRequest($object['selfLink']); $response = $this->client->getIo()->authenticatedRequest($request); 

Solutions Collecting From Web of "Загрузка файлов с помощью google-api-php-client"

Старый вопрос, но он заставил меня смотреть в правильном направлении. 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 к allUsers (вы можете сделать это с веб-консоли Google или использовать google php api)