Google apps script 如何在基于GAS的表单中正确设置新文件的共享权限

Google apps script 如何在基于GAS的表单中正确设置新文件的共享权限,google-apps-script,Google Apps Script,我使用GAS设置脚本中创建的文件的共享(来自上传的blob)时出现了一些不一致的结果。 总的来说,GAS脚本提供一个Html表单,收集上传的文件,并进行一些日志记录和处理。这是一个经过大量修改的版本,适用于学生提交的报告 到目前为止,我仅有的线索与设置共享的行相对于创建文件的行的位置有关: var folder = DriveApp.getFolderById(dropbox); // Get the blob var contentType = data.substring(5,data.i

我使用GAS设置脚本中创建的文件的共享(来自上传的blob)时出现了一些不一致的结果。 总的来说,GAS脚本提供一个Html表单,收集上传的文件,并进行一些日志记录和处理。这是一个经过大量修改的版本,适用于学生提交的报告

到目前为止,我仅有的线索与设置共享的行相对于创建文件的行的位置有关:

var folder = DriveApp.getFolderById(dropbox);

// Get the blob
var contentType = data.substring(5,data.indexOf(';'))
var bytes = Utilities.base64Decode(data.substr(data.indexOf('base64,')+7))
var blob = Utilities.newBlob(bytes, contentType, filename)

// Create a folder for the file if it does not exist
try{
  var subFolder =  folder.getFolder(tp);
}
catch(e) {
  var subFolder =  folder.createFolder(tp);
}
var file = subFolder.createFile(blob) // Create the file
从这一点开始,奇怪的事情发生了。我已将问题缩小到设置共享的实际行:

file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW)
如果这是在文件创建之后立即执行的,则仅在某些时候有效。已经提交了200多份报告,其中约50%的报告是任何人都可以看到的,而其余的则只能私下分享

无论是否设置了这些权限,其他所有操作都将成功完成。所以我没有错误日志来确定发生了什么

通过将此行移动到函数末尾,后续提交已正确设置权限:

// .... processing lines that include logging to a spreadsheet, sending emails, and setting other permissions.

file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW)

return "OK";
我的猜测是,出于某种原因,文件创建和权限修改之间的时间会影响.setSharing()行的有效性

一种假设是,该文件可能继承了父文件夹的权限(不是公共的),并带有“lag”。换句话说,.setShare()函数设置的权限将被文件创建行后面的某个obsecure继承函数覆盖:

 var file = subFolder.createFile(blob) // Create the file
“默认”权限必须在某个时候设置,但据我所知,没有“刷新”功能来强制或等待这种情况发生(比如谷歌电子表格中使用的那种)

编辑:我发现一个线程出现了类似的“非确定性”,涉及从父文件夹继承权限(请参阅)

我想知道如何确保权限设置始终正确

干杯
:)

根据您的情况,使用?通过使用驱动API,在创建文件时,还可以包括权限。您好,谢谢您的评论Tanaike。我已经关注了这个链接,但是我不清楚如何在我的脚本中使用驱动API。你能举个例子吗?礼节。您可以从中查看使用驱动API的示例。谢谢!我尝试了以下操作,文件创建正确,但再次没有设置文件创建的权限。我已将此文件资源与Drive.files.insert一起使用:`var filesrource={'title':fileName,'mimeType':contentType,'description':'lab report','shared':true,'permissions':[{“role”:“reader”,“type”:“any”,“withLink”:true}]}`我注意到我误解了Drive.Files.Insert的方法。尽管权限设置包含在请求正文中,但只能为创建的文件安装权限。当我使用Drive API v3进行尝试时,资源主体中的
错误包括不可直接写入的字段。
发生。也就是说,这表示在授予权限之前需要创建文件。我真的很抱歉。