我正在尝试更改云端硬盘中文档的所有权,但我收到以下错误:
很抱歉,发生了服务器错误。请稍等一下再试一次。 (第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);
}
}
答案 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