【发布时间】:2019-03-17 19:19:44
【问题描述】:
在 Google API explorer 上,我尝试在 drive.permissions.create 中提供正确的 fileId。我将supportsTeamDrives 设置为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,我没有t 弄清楚我需要使用哪个)到另一个 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 调用这些链接并将内容发布到另一个服务。有什么办法可以使这项工作?这样我就不必担心文件权限(back-n-forth)。
【问题讨论】:
-
它看起来像一个错误(试图寻找任何相关的,没有找到任何东西),尝试将其发布到他们的bug tracker。
-
如果您可以为来自其他 API 的请求设置授权,则可以使用您拥有的访问令牌。查看服务帐户。
标签: php permissions google-drive-api google-drive-shared-drive