axe*_*a82 2 php permissions google-drive-api google-drive-shared-drive
在Google API 资源管理器上,我尝试在drive.permissions.create 中提供正确的fileId。我将supportsTeamDrives 设置为true,请求主体的角色为:读者,类型为:任何人。这只是给了我错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalidLinkVisibility",
"message": "Bad Request. User message: \"\""
}
],
"code": 400,
"message": "Bad Request. User message: \"\""
}
}
Run Code Online (Sandbox Code Playgroud)
我的 PHP 代码也是如此。这是我能得到的最接近的,对我来说看起来很正确:
...
$userPermission = new Google_Service_Drive_Permission( array(
'type' => 'anyone',
'role' => 'reader',
));
$service->permissions->create( $imageId, $userPermission, array(
'supportsTeamDrives' => true,
));
...
Run Code Online (Sandbox Code Playgroud)
我在错误中找不到任何内容:
无效链接可见性
我需要做的是暂时将文件夹中 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 );
Run Code Online (Sandbox Code Playgroud)
其中 $token 是验证服务的身份验证令牌,$files 是https://drive.google.com/a/file/d/,$image1是文件的 ID。当然,在尝试此操作时,我必须首先登录我的 Google 帐户,这是行不通的,因为我将有另一个 API 调用这些链接并将内容发布到另一个服务。有什么方法可以让这项工作发挥作用吗?这样我就不必担心文件权限(来回)。
小智 5
你需要先删除旧的权限对象,这个对象通常会有这个默认的初始ID:10933160239610460256k(当我试图通过分析GDrive前后端交互找出这个解决方案时,我发现了这个ID)
$service->permissions->delete($file->id, '10933160239610460256k',array('supportsTeamDrives'=>true));
Run Code Online (Sandbox Code Playgroud)
然后创建一个像这样的新权限
$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));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2598 次 |
最近记录: |