尝试对通过表单"file upload"部分上传的文件设置"anyone with link can view"权限



a"文件上传"部分以表格使用:我需要表单用户(不是所有者)能够与表格所有者以外的其他人共享文件。<<<<<<<<<<<<<<<</p>

在表单中出现文件upload的结果将文件放入当前表单用户的驱动器中,并提供表单所有者可以查看的URL。我需要与他人共享该URL(通过脚本而不是手动干预)。

由表单输入触发,我的脚本运行:

DriveApp.getFileById(id).setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.NONE);

...何处从表单中提供的URL派生的地方(请参阅Google Apps脚本上的URL获取文件ID的最简单方法...我知道我的ID正确)。

作为指向表格链接的用户,我没有任何错误...我也不会以表格以所有者的形式输入错误。

但是,除了电子表格所有者以外,任何人都看不到URL(甚至输入并拥有文件的用户都无法查看链接)表格的非所有者将运行此。我猜想SetSharing正在作为表单的所有者而不是用户运行,因此无法将其设置为可共享?脚本有没有办法使文件/链接可查看?

但是,即使表格所有者运行表单,其他人也无法查看其他URL。我认为一旦文件变得可共享,ID就不会更改?所以我必须错误地调用setSharing?

也许表格提供的URL中的ID是n个"无限制",其中它不是文件的真实ID?

示例例程与这些URL的电子表格第4列的示例例程可共享:

`

function SetPermissions() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var maintsheet = ss.getSheetByName('Maintenance');
  var lastmr = maintsheet.getLastRow();
  for (var i = 2; i <= lastmr; i++) {
    var fileURL = maintsheet.getRange(i,4).getValue();
    Logger.log(fileURL);
    for (var j in fileURL.split(",")) {
      Logger.log(j);
      Logger.log(fileURL.split(",")[j]);
      var fileID = fileURL.split(",")[j].match(/[-w]{25,}/)[0]
      Logger.log(fileID);
      DriveApp.getFileById(fileID).setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.NONE);
    }
  }
}

`

...由表单/电子表格的所有者运行,没有错误,并且记录的数据看起来正确。但是,将URL交给另一个用户,然后获得权限错误。

这修复了:

   function SetPermissions() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var maintsheet = ss.getSheetByName('Maintenance');
      var lastmr = maintsheet.getLastRow();
      for (var i = 2; i <= lastmr; i++) {
        var fileURL = maintsheet.getRange(i,4).getValue();
        Logger.log(fileURL);
        for (var j in fileURL.split(",")) {
          Logger.log(fileURL.split(",")[j]);
          var fileID = fileURL.split(",")[j].match(/[-w]{25,}/)[0]
          Logger.log(fileID);
          var file = DriveApp.getFileById(fileID);
          file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
          var newURL = file.getUrl();
          maintsheet.getRange(i, 4).setValue(newURL);
        }
      }
    }

doh:https://developers.google.com/apps-script/reference/drive/permission

...我在告诉它:没有链接的任何人都没有权限!查看,是正确的选择!

这是一个函数,给定表单将粘贴在单元格中的URL列表(可以设置表单以允许每个单元格允许多个pics),设置权限并返回URL列表,这次是Google格式在geturl()中的URL:

function AnyoneWithLinkCanView(urls) {
  var newURLs = "";
  if ( urls.length > 0 ) {
    for each (var j in urls.split(",")) {
      var fileid = j.match(/[-w]{25,}/)[0];
      var file = DriveApp.getFileById(fileid);
      file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
      if ( newURLs.length > 0 ) {
        newURLs += ", ";
      }
      newURLs += file.getUrl();
    }
  }
  return newURLs;
}

在我的情况下,由于URL将构成电子邮件的消息正文,我的电话看起来像:

var message = AnyoneWithLinkCanView(dataSheet.getRange(lastr,i).getValue());

form inputs以创建形式触发器的任何人运行。如果您希望脚本运行,因为她可以访问她访问脚本和创建表单触发的宏。

相关内容

  • 没有找到相关文章

最新更新