Я получаю ошибку 403 при попытке загрузить любой файл с диска. Для загрузки используется следующая функция:
public function downloadFile($fileData)
{
$this->googleClient = $this->getClient(true);
$fileId = $fileData['id'];
$fileSize = (int)$fileData['size'];
$http = $this->googleClient->authorize();
$chunkSizeBytes = 1 * 1024 * 1024;
$chunkStart = 0;
$tmpFile = tmpfile();
$metaData = stream_get_meta_data($tmpFile);
fclose($tmpFile);
$newFile = fopen($metaData["uri"], "wb");
while ($chunkStart < $fileSize)
{
$chunkEnd = $chunkStart + $chunkSizeBytes;
$response = $http->request(
'GET',
sprintf('/drive/v3/files/%s', $fileId),
[
'query' => ['alt' => 'media'],
'headers' => [
'Range' => sprintf('bytes=%s-%s', $chunkStart, $chunkEnd)
]
]
);
$chunkStart = $chunkEnd + 1;
fwrite($newFile, $response->getBody()->getContents());
}
fclose($newFile);
return $metaData['uri'];
}
Настройки клиента:
$client = new Google_Client();
$client->setApplicationName('Google Drive load files');
$client->setScopes(Google_Service_Drive::DRIVE);
$client->setAuthConfig($this->configuration['gdriveCredentialsJson']);
$client->setAccessType('offline');
$client->setAccessToken($this->configuration['gdriveTokensJson']);
Я генерирую новый токен refre sh перед началом загрузки файла.
Возвращается следующая ошибка:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "appNotAuthorizedToFile",
"message": "The user has not granted the app 436111396855 read access to the file 1hUxQkXVFsOCoRnxANDVqlf8pIWV5Qssk.",
"locationType": "header",
"location": "Authorization"
}
],
"code": 403,
"message": "The user has not granted the app 436111396855 read access to the file 1hUxQkXVFsOCoRnxANDVqlf8pIWV5Qssk."
}
}
Я добавил свое приложение в сторонние приложения в «Управление контролем доступа к приложениям» и сделал его доверенным. Я также настроил область приложения в «Управление доступом клиентов API». Что Я скучаю?