从谷歌驱动器API获取图像URL而不是内容

时间:2017-07-05 22:28:49

标签: php html node.js google-drive-api

尝试从Google Drive API获取图片网址而不是文件内容。 在新版本中,这个好东西已被弃用。

我搜索了很多,在Google开发人员课上有一个方法,但它在新版本中也没有。

问题是我将从云端硬盘中获取大量图片,但不想放弃谷歌尝试通过我的应用程序所有图像的速度。这也是愚蠢的。

有没有办法以某种方式获得这些链接?

这是我用来获取文件内容的代码:

$this->client = new \Google_Client();
$this->client->setAuthConfigFile('config.json');
$this->client->setScopes('https://www.googleapis.com/auth/drive');


if (isset($_GET['code'])) $code = $_GET['code'];

if(!isset($_SESSION['access_token'])){
    if (!isset( $code )){
        $auth_url = $this->client->createAuthUrl();
        $filtered_url = filter_var($auth_url, FILTER_SANITIZE_URL);
        return redirect($filtered_url);
    }else{
        $this->client->authenticate($_GET['code']);
        $_SESSION['access_token'] = $this->client->getAccessToken();
        // return redirect('/');
    }
}

$this->service = new \Google_Service_Drive($this->client);
$file_id = '0B3vR4cBcxn4oNm9TSlBzcngyMzQ';
$results = $this->service->files->get($file_id, array('alt' => 'media'));

$imaga = $results->getBody()->getContents();

$imageData = base64_encode($imaga);
$contentType = $results->getHeader("content-type");

$src = 'data: '.$contentType[0].';base64,'.$imageData;

2 个答案:

答案 0 :(得分:0)

截至目前,我认为有两种方法可以通过API访问您的云端硬盘图片。如果要下载文件,则使用webContentLink;如果要显示文件,则使用webViewLink。这些是您可以使用的可用驱动器metadata

答案 1 :(得分:0)

我使用 node.js 和npm package googleapis(来自Google的官方软件包)遇到了同样的问题。

以下解决方案不在PHP中,但概念应保持不变。

虽然我迟到但可能会帮助其他人寻找类似的问题。

<强> Node.js的

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;

//setup your oauth credentials and tokens

oauth2Client.setCredentials(tokens);

var drive = google.drive({
    version: 'v2',
    auth: oauth2Client
});

drive.files.get({
    fileId: fileId, //id of the file you are looking for
    alt: 'media'
}, {
    responseType: 'arraybuffer',
    encoding: null
}, function(err, response) {
    if (err) {
        console.log(err);

        //handle the error
    } else {
        var imageType = response.headers['content-type'];
        var base64 = new Buffer(response.data, 'utf8').toString('base64');
        var dataURI = 'data:' + imageType + ';base64,' + base64;

        res.send(dataURI);
    }
});

<强> HTML

<img src="dataURI_received_from_above_HTTP_request"></img>