下载网址无法在Google Drive API PHP中使用

时间:2014-11-20 06:50:24

标签: php google-drive-api

我遇到了Google Drive API的问题,我能够使用API​​获取文件但我无法通过此链接下载。我想,必须有一些身份验证,但我已经使用刷新令牌进行身份验证。请参阅下面的代码

$this->load->library('google-api-php-client/src/Google_Client');
                include APPPATH . '/libraries/google-api-php-client/src/contrib/Google_DriveService.php';
                // Library Files Configuration to get access token and Refresh Token
                $client = new Google_Client();
                $client->setAccessType('offline'); // default: offline
                $client->setApplicationName('xxx'); //name of the application
                $client->setClientId('yyyy'); //insert your client id
                $client->setClientSecret('zzz'); //insert your client secret
                $client->setScopes(array('https://www.googleapis.com/auth/drive'));
                $service = new Google_DriveService($client);

                $client->refreshToken($drive_data->refreshtoken);
                $client->getAccessToken();
                $parameters = array();
                $files = $service->files->listFiles($parameters);
foreach ($files['items'] as $key => $items)
                            {
<a href="<?php echo $files['items'][$key]['downloadUrl'];  ?>">Download</a>
}

有人知道如何通过身份验证获取下载URL吗?

3 个答案:

答案 0 :(得分:1)

这有答案: (Java) Download URL not working

GDrive的v2似乎有一些变化,而不是使用“downloadUrl”,您可能必须使用“webContentLink”来获取下载链接

答案 1 :(得分:0)

要获取downloadUrls,您需要获取文件的元数据。您可以使用get方法执行此操作。该方法将返回File Resource表示。在此资源中,有一个 downloadUrl 属性。如果您已经能够访问文件并获取URL,那么您的身份验证设置应该没有问题。可能存在权限问题,您可能无法访问某些驱动器文件,但如果您没有收到任何错误,那么您也应该没问题。我对PHP并不是特别熟悉,但也许你没有正确下载它? Here它似乎以不同的方式完成。

我还建议你查看Drive PHP Quickstart App作为参考。

答案 2 :(得分:0)

我今天遇到了同样的问题,刚刚为我的案子找到了一个解决方案。我希望这有助于一个或另一个混淆PHP编码器那里谁也没有得到downloadUrl。我假设您正在使用v2 API的示例,如https://developers.google.com/drive/v2/reference所示。

首先,我改变了头部,不仅要访问元数据,还要获得完全访问权限(请注意 DRIVE 常量):

<?php
require 'vendor/autoload.php';
const DRIVE = "https://www.googleapis.com/auth/drive";
define('APPLICATION_NAME', 'MAGOS poller');
define('CREDENTIALS_PATH', 'credentials.json');
define('CLIENT_SECRET_PATH', 'client_secret.json');
define('SCOPES', implode(' ', array(Google_Service_Drive::DRIVE)));

然后我删除了我的凭据文件(credentials.json)并重新编写脚本,以便再次针对gDrive进行身份验证并重新创建凭据文件。之后

$downloadUrl = $file->getDownloadUrl();

终于像魅力一样。