无法访问刚创建的Google云端硬盘文件夹

时间:2016-02-13 01:20:00

标签: google-apps-script

我创建了一个脚本,可以在Google云端硬盘中生成一个文件夹并获取该文件夹的文件夹ID。

尝试在唯一函数中访问该文件夹时,我收到错误:

找不到具有给定ID的项目,或者您无权在文件夹

上访问该项目

请参阅下面的我的脚本(独立于html调用):

var childFolderIdA;


function doGet() {
return HtmlService.createHtmlOutputFromFile('multifile').setTitle('test –     multi upload').setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function test(parent,child){
   createSharedSubFolder(parent,child);
}

function createSharedSubFolder(parent,child) { // folder names as string parameters 
  var folders = DriveApp.getFolders();
  var exist = false
  while (folders.hasNext()) {
  var folder = folders.next();
  if(folder.getName()==parent){exist = true ; var folderId = folder.getId();  break};// find the existing parent folder
  }
  if(exist){ //parent folder exists
    var child = DriveApp.getFolderById(folderId).createFolder(child).setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
    var childFolderId = child.getId();
    childFolderIdA = childFolderId;
    }else{
    var childFolder = DriveApp.createFolder(parent).createFolder(child);            //create parent and child folders
    childFolder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
    } 
}

function saveFile(data,name,folderName) { 
  var contentType = data.substring(5,data.indexOf(';'));

  var file = Utilities.newBlob(Utilities.base64Decode(data.substr(data.indexOf('base64,')+7)), contentType, name); //does the uploading of the files
  DriveApp.getFolderById(childFolderIdA).createFile(file);
}

1 个答案:

答案 0 :(得分:0)

您不能依赖全局变量来保存调用之间的状态。每次调用脚本时,都会生成一个新的脚本实例。每个人都将保持自己的状态。

例如:

google.script.run.createSharedSubFolder(...) --> Script Instance 1..var childFolderIdA=folderId;

google.script.run.saveFile(...) --> Script Instance 2..var childFolderIdA=null;  

您可以将folderId保存到users属性存储:

PropertiesService.getUserProperties().setProperty("childFolderId", childFolderId);

您可以检索文件夹Id:

var folderId = PropertiesService.getUserProperties().getProperty("childFolderId");

您的代码有此更改:

function doGet() {
return HtmlService.createHtmlOutputFromFile('multifile').setTitle('test –     multi upload').setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function test(parent,child){
   createSharedSubFolder(parent,child);
}

function createSharedSubFolder(parent,child) { // folder names as string parameters 
  var folders = DriveApp.getFolders();
  var exist = false
  while (folders.hasNext()) {
  var folder = folders.next();
  if(folder.getName()==parent){exist = true ; var folderId = folder.getId();  break};// find the existing parent folder
  }
  if(exist){ //parent folder exists
    var child = DriveApp.getFolderById(folderId).createFolder(child).setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
    var childFolderId = child.getId();
    PropertiesService.getUserProperties().setProperty("childFolderId", childFolderId);

    }else{
    var childFolder = DriveApp.createFolder(parent).createFolder(child);            //create parent and child folders
    childFolder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
    } 
}

function saveFile(data,name,folderName) { 
  var contentType = data.substring(5,data.indexOf(';'));

  var file = Utilities.newBlob(Utilities.base64Decode(data.substr(data.indexOf('base64,')+7)), contentType, name); //does the uploading of the files
  var childFolderId = PropertiesService.getUserProperties().getProperty("childFolderId");
  DriveApp.getFolderById(childFolderId).createFile(file);
}