Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Google Drive API V3 с PHP-клиентом 2.0 - загрузка содержимого файла и метаданных одним запросом

Автор вопроса: temuriОтветов: 1

Я пытаюсь загрузить файлы с Google Диска, используя PHP-клиент v2.0 с Drive API V3.

Можно ли получить тело файла и метаданные в одном HTTP-запросе?

Предоставление 'alt=media' для ->files->get() возвращает GuzzleHttp\Psr7\Response, на котором я могу запустить ->getBody()->__toString().

Если я не укажу 'alt=media', то возвращается Google_Service_Drive_DriveFile, у которого есть все метаданные, но нет тела.

Вопрос.

Можно ли получить метаданные и тело в одном запросе?

  • Вы можете сделать это только в двух отдельных запросах. Это связано с тем, что для загрузки файла требуется alt=media. Существует еще один способ загрузки файла - с помощью downloadURL, но с его помощью вы не сможете запрашивать метаданные. gerardnimo 25.02.2016

google-apigoogle-drive-apigoogle-api-php-client

Ответы

Ответ 1 · рейтинг 1 · Emm

Попробуйте что-то вроде этого:

<?php

// Сначала посмотрите на это: https://developers.google.com/api-client-library/php/auth/web-app

require_once __DIR__ . '/vendor/autoload.php';

// измените свой часовой пояс date_default_timezone_set('Pacific/Auckland');

$client = new Google_Client();
$client->setAuthConfig('client_secrets.json');
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setIncludeGrantedScopes(true);

//меняем скоупы на нужные

$client->addScope(Google_Service_Drive::DRIVE_FILE, Google_Service_Drive::DRIVE_APPDATA, Google_Service_Drive::DRIVE, Google_Service_Drive::DRIVE_METADATA);
$accessToken = json_decode(file_get_contents('credentials.json'), true);
$client->setAccessToken($accessToken);

// Обновить токен, если срок его действия истек. Google истекает через час, так необходимо

if ($client->isAccessTokenExpired()) {
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
    file_put_contents('credentials.json', json_encode($client->getAccessToken()));
}

$service = new Google_Service_Drive($client);
$results = $service->files->listFiles($optParams);
$fileId = 'yourfileid;
$file = $service->files->get($fileId, array('alt' => 'media'));
file_put_contents("hello.pdf",$file->getBody());
?>

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы