Google App Script:尝试创建文件夹时拒绝访问

时间:2016-02-01 10:27:06

标签: google-apps-script

我查看了我的Gmail帐户。如果有带图片附件的新邮件,我会在我的Google云端硬盘帐户中创建一个子文件夹,文件夹名称为电子邮件主题,并为每个附件创建一个文件。

尝试使用%admin%在根目录中创建子文件夹时,每件事都很有效,但在使用DriveApp.createFolder()对象的.createFolder()方法时出错了。

  

这是证明我们可以使用Folder对象创建文件夹的link to App script documentation

这是代码:

Folder

我收到了这个错误

  

拒绝访问:DriveApp。 (里加57,档案“生产”)

在这一行

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());
  }

}

我检查了我的日志,因此我确定folder = main_folder.createFolder(title); 是现有文件夹。

这是我的文件夹,不是某人给我的。那么,为什么App脚本无法创建子文件夹呢?

编辑:

我尝试调试我的权限添加这些行

main_folder

用户的电子邮件是正确的,它是所有者。但第二个日志行告诉我Logger.log(Session.getActiveUser().getEmail()); var access = main_folder.getAccess(Session.getActiveUser()); Logger.log(access); 。现在的问题是为什么我不能使用这个App Script独立脚本对我的文件夹进行写访问?

编辑2:

我尝试验证所有权

VIEW

太可惜了!所有者的电子邮件不是我的电子邮件,但是用户的电子邮件与我一起分享这个脚本...但我在Drive上验证了主文件夹的REAL所有者是我...

那么我做错了什么以及如何使用共享脚本写入私人文件夹?

1 个答案:

答案 0 :(得分:1)

原因是我的脚本由用户拥有,并且与我共享编辑权限。

所以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检索脚本所有者文件夹而不是当前用户的错误。