【问题标题】:Google Drive API,preview file with iframeGoogle Drive API,使用 iframe 预览文件
【发布时间】:2019-02-07 18:07:26
【问题描述】:

我需要预览我的谷歌驱动器文件,是我的档案,但是是私人的,但我不想登录我的帐户来预览文件,我如何使用 Oauth 身份验证来预览文件?如果是的话如何我可以做到。我尝试生成 webContentLink 但也需要登录,谢谢

    $url_array = explode('?', 'My url permited');
    $url = $url_array[0];
    $client = new Google_Client();
    $client->setClientId('My client ID');
    $client->setClientSecret('My client secret');
    $client->setRedirectUri($url);
    $client->setScopes(array('https://www.googleapis.com/auth/drive'));
    $client->setAccessType('offline');
    $client->setState('offline');
    $client->refreshToken('My refresh token with Oauth playground');
    $service = new Google_Service_Drive($client);

在与 API 连接后,我将上传到谷歌驱动器

        $content = file_get_contents($_FILES["file"]["tmp_name"]);//pega o conteudo do arquivo
    $file = $service->files->create($fileMetadata, array(//função para inserir aonde tem 2 parametros,metadados e  conteudo/tipo e etc do arquivo
        'data' => $content,
        'mimeType' => 'application/octet-stream',
        'uploadType' => 'multipart',
        'fields' => 'id,webViewLink,webContentLink,thumbnailLink'));
    printf("File ID: %s\n", $file->id);

我需要这个 webViewLink 来放入 iframe,但是当我进入 webViewLink 时没有请求登录

【问题讨论】:

  • developers.google.com/drive/api/v3/about-auth 你应该以minimal reproducible example 的形式展示你尝试过的内容。
  • 我不认为这是我的代码引起的问题,我只是想知道如何做某事,我已经建立了 Oauth 身份验证,我需要知道我必须在 API 中做什么。
  • 但是minimal reproducible example 会给人们提供背景信息,所以他们真的很想帮助你。没有代码的问题在这里没有吸引力。例如,Drive API 具有对项目的不同级别的访问权限,以及一些不同的访问权限级别,即使是最低级别的访问权限。我们不知道你在做什么。
  • 好的,我会更新我的问题
  • 代码在问题中

标签: php google-api google-drive-api google-oauth google-api-php-client


【解决方案1】:

让我们考虑私人用户数据。用户拥有的数据,例如您上传到 Google Drive 帐户的文件。唯一可以看到这些文件的是有权访问它们的用户。我不能只访问您的云端硬盘帐户并访问您的个人数据。

Oauth2 为我们提供了一种授予应用程序(客户)访问我们个人数据的方法。当您想使用应用程序时,您登录到您的谷歌帐户,系统会提示您同意屏幕以授予应用程序访问您的数据的权限。如果应用程序(客户端)请求离线访问,他们将获得一个刷新令牌,他们可以随时使用它来请求访问令牌以访问您的数据。通过这种方式,应用程序以您的身份向谷歌验证自己。如果没有刷新令牌,您的代码将提示用户请求访问其数据的权限,应用程序不需要再次提示,因为您已经授予了它。

使用访问令牌,应用程序将能够访问 google drive api 和您存储的数据。这与 google drive web 应用程序无关。

访问私人用户数据

webViewLink 仅在拥有网络链接的相关用户已被授予访问该文件的权限或该文件为公开文件时才有效。如果他们尚未登录,系统将提示他们登录,因此请确保您已确定用户的文件。

记住 Oauth 用于授予您的应用程序访问用户数据的权限。您可以通过 api 访问该数据。除非您创建自己的应用程序来预览文件,否则您无法以编程方式预览文件。您将无法在 Google Drive Web 应用程序中预览文件。用户需要使用自己的帐户登录应用程序才能查看 google drive web 应用程序上的文件。

当前登录用户

请运行以下语句,它将显示您当前登录的用户。

$service->about->GetAbout(array('fields' => '*'));

你不能在没有登录的情况下访问谷歌驱动器,你使用你的刷新令牌登录。

【讨论】:

  • 谢谢,但是如果我在没有使用 API 登录的情况下上传文件,为什么我没有授予访问权限以在没有使用相同 API 登录的情况下预览文件?你知道我可以如何做我自己的预览应用程序吗?文件?我急需这个,谢谢
  • 您无法在不登录的情况下上传文件。上传到用户谷歌驱动器帐户的唯一方法是登录。如果您使用的是服务帐户,那么服务帐户会在您的代码中进行身份验证,因此它登录并将文件上传到自己的帐户。如果没有以有权访问文件的用户身份登录,您将无法预览文件。创建一个应用程序来查看文件将是一个大项目,我祝你好运。
  • 我在没有登录的情况下上传文件,配置了我的 API,我使用 Oatuh 操场生成了一个刷新令牌并将访问类型设置为离线,我在没有登录我的帐户的情况下将文件上传到我的驱动器。这就是重点,我在没有登录的情况下使用 API 进行上传,那么为什么我无法使用相同的 API 进行预览?没有登录,为什么我无法预览?我还使用我的 API 没有登录就下载了文件...
  • 然后你就登录了。离线访问只是给你一个刷新令牌,你可以用它来请求一个新的访问令牌。您正在将文件上传到您的云端硬盘帐户,没有登录就无法将文件上传到任何人的云端硬盘帐户。您无法预览它,因为您未登录或您登录的用户没有访问权限。跨度>
  • 请运行 GetAbout 方法查看您当前登录的用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
相关资源
最近更新 更多