我正在研究 google Drive api。我需要删除其他用户上传的文件。我们使用公共文件夹来上传文件。我需要从上传位置下载并删除文件。
代码。
do{
FileList result2 = service.files().list().setFields("nextPageToken, files(id, name,parents,mimeType,owners)").setPageToken(pageToken).execute();
for (File file : listFiles) {
downloadFile(file)//This method download files. ITs working file
service.files().delete(file.getId()).execute();
pageToken = result2.getNextPageToken();
}
}while (pageToken != null);
service.files().delete(file.getId()).execute();
throwing exception
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "The user does not have sufficient permissions for this file.",
"reason" : "insufficientFilePermissions"
} ],
"message" : "The user does not have sufficient permissions for this file."
}
我知道我不是所有者,所以我无法删除文件。有没有办法更新我的角色或创建超级用户角色并从驱动器中删除文件。 预先感谢。
用户对此文件没有足够的权限。
确切的意思是用户没有删除文件的权限。除了联系文件所有者并让他们删除它之外,您实际上无能为力。
我不知道您如何将这些文件上传到这个中心位置,但一个想法是使用服务帐户来上传文件。然后它将拥有这些文件。然后,当您想要删除它们时,您可以让服务帐户用户删除文件,而不是依赖当前登录的用户来删除文件。
我知道我不是所有者,所以我无法删除文件
你在这一点上是完全正确的。删除和销毁文件只能由所有者完成。
不过有一种解决方法。您可以从文件中删除父 ID。这将从文件夹中删除该文件。为此,请使用
Files:更新端点的
removeParents
参数。当您通过网络界面从共享文件夹中“删除”文件(不属于您)时,Google 云端硬盘也会执行此操作。
此方法的一个警告是文件大小仍将计入拥有用户的 Google 云端硬盘存储限制。
在我看来,也许您的服务范围不足以删除文件/文件夹。
如果您使用 Google_Service_Drive::DRIVE_METADATA,请将其删除。然后使用 Google_Service_Drive::DRIVE 范围。
假设这种情况:用户 A 与用户 B 共享文件夹 X。用户 A 仍然是文件夹 X 的所有者,而用户 B 是编辑者
看来用户 B 上传到文件夹 X 的任何文件都将归用户 B 所有,并且用户 A 将被授予编辑者权限。
在 Web UI 中 - 用户 A 可以“删除”文件;但实际情况似乎并非如此。该文件仍然存在,但我相信发生的情况是 Google 只是从共享权限中删除了活动用户。本质上,如果您进入共享对话框并删除自己 - 这将是同样的事情。再次,这里是一个假设。
@Finn 的回答对我不起作用。我相信“父级”是文件夹 - 而不是所有者。我试验的文件只有一个父文件,它似乎与我在查看时在 URL 中看到的文件夹 ID 相匹配。删除它并没有删除它,但它没有抛出错误。
我确实成功的是 Permissions.delete 方法并删除了我自己的权限。刷新 Web UI 后,该文件立即消失 - 当我将链接发送给用户 B 时,他们说该文件仍然存在 - 甚至在原始文件夹中。
使用 Permissions.delete 方法时,Google 似乎期望 JSON 有效负载,其中指定查询参数,而不是 URL 参数。
我看到的一个问题是确保公司数据保存在公司帐户中。如果某个文件夹与某人的个人电子邮件共享,那么他们将始终拥有这些文件,公司不可能取得所有权并删除它们。