【问题标题】:Trying to change owner on files in Google Drive尝试更改 Google 云端硬盘中文件的所有者
【发布时间】:2014-10-23 13:43:23
【问题描述】:

我正在尝试更改云端硬盘中文档的所有权,但收到以下错误:

很抱歉,发生服务器错误。请稍等,然后重试。 (第 12 行,文件“代码”)

function transferFiles() {

var files = DriveApp.getFiles();
while (files.hasNext()) {
  var file = files.next();
var owner = file.getOwner().getEmail();

  if (owner != 'adminuser@domain.co.uk'){
    file.setOwner('adminuser@domain.co.uk');

}
  Logger.log(file);

}
}

【问题讨论】:

标签: google-apps-script google-drive-api


【解决方案1】:

您描述了一个已报告的问题。请参阅并加注星标Issue 2756:非法 ACL 更改导致服务器错误

总结:只有文件的所有者才能更改所有权。管理员帐户不拥有用户的文件,因此他们在这方面没有特殊权限。

this answer 中描述了一种利用 Drive API(不是 Google Apps 脚本)模拟域用户的可能解决方法,遗憾的是没有实现细节。

【讨论】:

  • 这实际上不是真的,“如果您是域管理员,您可以使用 Drive SDK(现在作为 Apps Script 上的高级服务提供)来模拟您的用户并以他们的身份调用 setOwner”
  • 说一个人是骗子是认真的。您包含了一个没有署名的报价,而不是来自这个答案。您能否更简洁地说明事实不正确的内容?
  • 我从来没有给你打电话,我声明你的陈述不是真的=),你在那个帖子里评论了完全相同的东西:stackoverflow.com/questions/23783735/…
  • 哪个陈述不正确,哪里错了?您描述的问题已报告。它是问题 2756。该问题中的文本可以按所述进行总结。管理员可以使用 Drive API 来模拟用户。它已经完成(another refand anotherand another),并且最近更新了 Drive API 的 delegation of authority 文档。
【解决方案2】:

我认为该错误消息的根本原因可能与您的互联网连接不同。我猜测尝试设置权限时出错,这会终止您的代码,然后服务器连接发生了一些事情。

我并不是说这是问题的答案,但我自己运行了一些代码,我得到的文件甚至没有出现在我的 Google 云端硬盘中。我不知道这些文件在哪里。显示在我的文件列表中的这些文件有其他所有者,并且不在我的 Google 云端硬盘中。所以,我假设它们是我之前下载的文件,并且可能授予权限,然后删除。我不知道。

我想知道导致错误的文件、文件所在的文件夹以及文件数。因此,我创建了一个计数器并查找了文件所在的文件夹。列表中显示的文件也位于我的 Google 驱动器中不存在的文件夹中。所以,DriveApp 再次从某个地方获取文件,并且从某个我不知道的文件夹中获取文件。

function transferFiles() {

var files = DriveApp.getFiles();
var cntFiles = 0;

while (files.hasNext()) {
  cntFiles = cntFiles + 1;
  Logger.log('File Count: ' + cntFiles)

  var file = files.next();
  Logger.log('file: ' + file);

  var whatFolder = file.getParents();

  while (whatFolder.hasNext()) {
    var folder = whatFolder.next();
    Logger.log('Folder Name: ' + folder.getName());
  }

  var owner = file.getOwner().getEmail();
  Logger.log('owner: ' + owner);

  //if (owner != 'dummyName@gmail.com') {
    //file.setOwner('dummyName@gmail.com');
  //}
}
}

我收到的文件来自我的其他 Google 帐户。奇怪的。它是如何做到的?谷歌一定以某种方式链接了我不同的谷歌账户。我的意思是,要弄清楚这个问题是什么,也许你需要确切地知道是哪个文件给出了错误。

您可以在代码中添加一些错误处理,这样故障就不会破坏代码。您想知道哪个文件未能允许更改权限。所以你可能想以某种方式记录它。

以下代码显示了导致错误的所有文件,以及该文件的错误:

function transferFiles() {

var files = DriveApp.getFiles();
var cntFiles = 0;

while (files.hasNext()) {
  cntFiles = cntFiles + 1;
  //Logger.log('File Count: ' + cntFiles)

  var file = files.next();
  //Logger.log('file: ' + file);

  var whatFolder = file.getParents();

  while (whatFolder.hasNext()) {
    var folder = whatFolder.next();
    //Logger.log('Folder Name: ' + folder.getName());
  }

  var owner = file.getOwner().getEmail();
  //Logger.log('owner: ' + owner);

  try { 
    if (owner != 'someEmail@gmail.com') {
      file.setOwner('someEmail@gmail.com');
      Logger.log('File that was changed: ' + file);
    }
  } catch (theError) {
    Logger.log('There was an error for file: ' + theError);
    Logger.log('File that caused error: ' + file);
  };
}
}

我遇到了错误:

不允许操作 无效参数:sharing.user

【讨论】:

    【解决方案3】:

    不允许域管理员更改文件/文件夹属性,只有 onwer 可以这样做。 您可以做的是实现一个 webapp,让用户(也是所有者)根据时间或您可以触发的任何事件自动执行此操作。 看看: Google Apps Script Web App Example, Take ownership of other users Drive-files using Google Apps Script

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多