我检查了我的Gmail帐户。如果有带有图片附件的新邮件,我会在我的Google云端硬盘帐户中创建一个子文件夹,并将文件夹名称作为电子邮件主题,并为每个附件创建一个文件。
[使用DriveApp.createFolder()
尝试在根目录中创建子文件夹时,一切正常,但是当使用.createFolder()
对象的Folder
方法时出现错误。
这是link to App script documentation,证明我们可以使用Folder对象创建文件夹。
这是代码:
var folders = DriveApp.getFoldersByName("Received photos");
if (!(folders.hasNext())) {
Logger.log ("Recevied photos folder not found!");
} else {
var main_folder = folders.next();
Logger.log ("Going into " + main_folder.getName());
var main_folder_id = main_folder.getId();
// Move every attachment to right folder
var folders = main_folder.getFoldersByName(title);
if (folders.hasNext()) {
Logger.log ("Folder exists" + title);
folder = folders.next();
} else {
Logger.log ("Folder " + title + " not exists, I create it");
/**********************************************************
* THE FOLLOWING ROW GIVE ME ACCESS DENIED ERROR
***********************************************************/
folder = main_folder.createFolder(title);
}
try {
attachments.forEach(function (attachment, idx_att) {
var moved_file = folder.createFile(attachment);
});
} catch (e) {
Logger.log(e.toString());
}
}
我收到此错误
拒绝访问:DriveApp。 (riga 57,文件“生产”)
在此行
folder = main_folder.createFolder(title);
我检查了日志,所以我确定main_folder
是现有文件夹。
这是我的文件夹,不是别人与我共享的。那么,为什么App脚本无法在其中创建子文件夹?
编辑:
我尝试调试添加这些行的权限
Logger.log(Session.getActiveUser().getEmail());
var access = main_folder.getAccess(Session.getActiveUser());
Logger.log(access);
用户的电子邮件是正确的,是所有者。但是第二个日志行告诉我VIEW
。现在的问题是为什么我不能使用此App Script独立脚本对文件夹进行写访问?
编辑2:
我试图验证所有权
var owner = main_folder.getOwner();
Logger.log(owner.getEmail());
一个惊喜!所有者电子邮件不是我的电子邮件,而是与我共享此脚本的用户的电子邮件...但是我在云端硬盘上进行了验证,主文件夹的真实所有者是我...
所以我在做什么错了,以及如何能够使用共享脚本写入私有文件夹?
原因是我的脚本归用户所有,并且共享给我编辑权限。
所以getFoldersByName()
不仅给我一个文件夹,而且给了我一个组,因为其他用户有一个使用此名称的文件夹。
所以我循环查找具有正确所有者的那个
// Because the folder 'Received photos' is present in
// a lot of occurencies. The one I need is that with owner = current user
while (folders.hasNext()) {
main_folder = folders.next();
if (main_folder.getOwner().getEmail() == Session.getActiveUser().getEmail()) {
break;
};
}
Logger.log ("Dive into " + main_folder.getName());
var main_folder_id = main_folder.getId();
...并且脚本现在可以写入文件夹了
当然,对我来说,这是一个错误,getFoldersByName
会检索脚本所有者的文件夹而不是当前用户。