尝试从Google云端硬盘下载文件,但downloadUrl未附带元数据

时间:2013-05-22 17:32:49

标签: php google-drive-api

我正在开始基于Google云端硬盘的开发。某种类型的“在Excel中编辑,将其放入数据库”。问题是:我正在尝试从驱动器下载文件,但我无法获取downloadUrl属性。

我正在关注此页面,来自Google本身:https://developers.google.com/drive/manage-downloads
它说我必须获取文件元数据,然后提取downloadUrl属性。

与许可有关吗?或者某种类似的事情?

编辑

这是我正在使用的代码(部分)。 首先,在Google的页面上显示一个功能

function downloadFile($service, $file) {
    $downloadUrl = $file->getDownloadUrl();
    if ($downloadUrl) {
        $request = new Google_HttpRequest($downloadUrl, 'GET', null, null);
        $httpRequest = Google_Client::$io->authenticatedRequest($request);
        if ($httpRequest->getResponseHttpCode() == 200) {
            return $httpRequest->getResponseBody();
        }
    }
}

代码的其余部分仍作为示例:

$client = new Google_Client();
// Get your credentials from the APIs Console
$client->setClientId('xxxxxxxxxxxxxxxxxxx');
$client->setClientSecret('xxxxxxxxxxxxxxxxxxxxxx');
$client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));

$service = new Google_DriveService($client);
$authUrl = $client->createAuthUrl();

//Request authorization
print "Please visit:\n$authUrl\n\n";
print "Please enter the auth code:\n";
$authCode = trim(fgets(STDIN));

// Exchange authorization code for access token
$accessToken = $client->authenticate($authCode);
$client->setAccessToken($accessToken);

//Retrive a file
$file = new Google_DriveFile();

$file->setDownloadUrl("https://www.googleapis.com/drive/v2/files/{fileID}");
$requestedFile = json_decode(downloadFile($service, $file));
print_r($requestedFile);

打印时,我看不到downloadUrl属性。当然,我也无法访问它!

2 个答案:

答案 0 :(得分:0)

试试此代码

$service = new Google_Service_Drive($client);
/** @var GuzzleHttp\Psr7\Response $content */
$content = $service->files->get($googleDriveId, ['alt' => 'media']);

我还建议你使用与guzzle集成的sdk v2。此代码将返回GuzzleHttp \ Psr7 \ Response而不是字符串。

答案 1 :(得分:-1)

在我的blog中,我详细介绍了如何获取授权码然后​​获取目录列表。列表中的每个文件都包含元数据,包括downloadUrl属性。博客中也涵盖了这一点here.

我也在尝试下载文件,但遇到了其他问题,但您可能会发现使用here