繁体   English   中英

php对任何人或特定域的Google Drive API(团队驱动器)文件权限

Google Drive API (team drive) file permissions in php to anyone or specific domain

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

Google API资源管理器上,我尝试在drive.permissions.create中提供正确的fileId。 我将supportTeamDrives设置为true,并使用角色:读者和类型:任何人来设置请求正文。 这只是给我的错误:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidLinkVisibility",
    "message": "Bad Request. User message: \"\""
   }
  ],
  "code": 400,
  "message": "Bad Request. User message: \"\""
 }
}

我的PHP代码中也是如此。 这是我所能找到的最接近的位置:

...
$userPermission     = new Google_Service_Drive_Permission( array(
                'type'          => 'anyone',
                'role'          => 'reader',
            ));
            $service->permissions->create( $imageId, $userPermission, array(
                'supportsTeamDrives'    => true,
            ));
...

我找不到关于该错误的任何内容:

invalidLinkVisibility

我需要做的是将文件夹中20-50个文件的权限临时设置为“公开”(即,知道链接的任何人都可以看到),因为我正在发送webContentLink(或webViewLink,我还没有弄清楚)我需要使用哪一个)到另一个API上载图片。 完成此操作后,我想删除公共访问权限。 一种选择是将文件夹的权限(具有递归公共访问权限)设置为公共访问权限。 我只是不知道如何在PHP中更改(或添加)Google Drive API中的文件权限。

一种替代方法是,如果有某种方法可以通过包含令牌的URL获取图像,例如

$source     = $files.$image1;
$context    = stream_context_create( array(
    'https' => array(
        'header'  => 'Authorization: Bearer '. $token
    )
) );
$image = file_get_contents( $source, false, $context );

其中$ token是验证服务的身份验证令牌,$ files是https://drive.google.com/a/file/d/,而$ image1是文件的ID。 当然,在尝试此操作时,我必须先登录我的Google帐户,因为我将使用另一个API调用这些链接并将内容发布到其他服务,所以该帐户将无法使用。 有什么办法可以使这项工作吗? 这样,我就不必担心文件权限(倒数第二个)。

1 个回复

您需要先删除旧的权限对象,该对象通常具有默认的初始ID:10933160239610460256k(当我尝试通过分析GDrive前端与后端的交互来找出此解决方案时,我找到了此ID)

$service->permissions->delete($file->id, '10933160239610460256k',array('supportsTeamDrives'=>true));

然后像这样创建一个新的权限

$Permission = new \Google_Service_Drive_Permission(array(
    'type' => 'anyone',
    'role' => "reader",
    'additionalRoles' => [],
    'withLink' => true,
    'value' =>'YOUR_TEAM_DRIVE_DOMAIN' 
          ));
$service->permissions->create(
        $file->id, $Permission, array('fields' => 'id','supportsTeamDrives'=>true));
2 访问与具有链接的任何人共享的Google驱动器目录中的文件可以查看

我教如何使用App Inventor 2制作应用程序。我的学生拥有google ID,并可以访问google drive。 我希望他们能够创建一个列出共享Google驱动器文件夹内容的应用程序(它们具有该文件夹的链接),选择其中一个文件并下载该文件。 目的是驱动类似hangman的应用程序, ...

3 使用google-api-services-drive:v3从google驱动器下载文件

我刚刚无法从Google驱动器下载文件。 我可以获得webContentLink。 如果我通过浏览器访问此文件,则可以下载文件,但是无法通过我的应用程序下载相同的文件...我阅读了有关Google驱动器的几乎所有文档,但找不到任何方法将文件下载到我的存储设备。 在这里我得到了文件的链接 ...

6 为什么在 google-api-services-drive 中使用共享驱动器的 fileId 时“找不到文件”?

下面的代码试图为我之前创建的共享驱动器授予组fileOrganizer权限,该共享驱动器使用类似的代码和模拟同一用户的相同服务帐户。 (我用假的来编辑实际的DRIVE_ID ) 从下面的输出中可以看出,我的代码能够列出我现有的两个驱动器。 第二个(将 id 编辑为bbb )是我想与组共享的一个 ...

7 使用 curl 命令通过 drive-rest-api 将文件上传到谷歌驱动器中特定文件夹的直接方法

我正在编写一个 bash 脚本,使用 curl 命令将本地文件上传到谷歌驱动器。 在那,我总是使用 google-drive-v3 rest 查询来创建和更新(PATCH)文件。 有什么办法可以将文件直接上传到驱动器中的特定文件夹? 目前,我编写了这样的脚本, 1.在特定目录下创建空文件。 ...

10 使用 google drive-drive-api-v3 和 node js 将文件复制到共享的 google 驱动器时,是否可以专门针对共享驱动器

我正在尝试通过 nodejs 使用驱动器 API v3 将谷歌文档上传到共享驱动器。 执行上传的用户对要复制文件的目标文件夹具有写入和编辑权限,并且所有 OAuth 都已设置等......但是,我收到以下错误: 有没有办法专门针对共享驱动器? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM