我遇到了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吗?
答案 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();
终于像魅力一样。