[Google App脚本:尝试创建文件夹时拒绝访问

问题描述 投票:1回答:1

我检查了我的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());

一个惊喜!所有者电子邮件不是我的电子邮件,而是与我共享此脚本的用户的电子邮件...但是我在云端硬盘上进行了验证,主文件夹的真实所有者是我...

所以我在做什么错了,以及如何能够使用共享脚本写入私有文件夹?

google-apps-script
1个回答
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会检索脚本所有者的文件夹而不是当前用户。

© www.soinside.com 2019 - 2024. All rights reserved.