尝试更改Google云端硬盘中文件的所有者

时间:2014-10-23 13:43:24

标签: javascript google-apps-script

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

  

很抱歉,发生了服务器错误。请稍等一下再试一次。 (第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);

}
}

3 个答案:

答案 0 :(得分:1)

您已描述过报告的问题。见& star Issue 2756:非法ACL更改的服务器错误

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

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

答案 1 :(得分:0)

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

我并不是说这是问题的答案,但我自己运行了一些代码,而且我收到的文件甚至不会显示在我的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必须以某种方式关联我的不同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

答案 2 :(得分:0)

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