【问题标题】:List Google Drive files from a given folder on a webpage列出网页上给定文件夹中的 Google Drive 文件
【发布时间】:2016-03-14 03:09:17
【问题描述】:

我正在寻找一种方法来列出特定谷歌驱动器文件夹中的所有文件,它也会自动更新列表,让每个人都可以查看。我发现相当多的文章创建了一个电子表格来列出它们,但它们不会自我更新。我只是能理解一点 JavaScript,我试图修改其他一些代码无济于事。这是我所做的。

我创建了一个 Google Apps 脚本文件

function doGet(e){
return HtmlService.createHtmlOutputFromFile('list.html');}

list.html内部

<!DOCTYPE html>
<html>
  <head>
  <script type="text/javascript">
    var dir = "SpinFest2016 KPDS Clips"

    function listFilesInFolder(dir) {

      var folder = DriveApp.getFoldersByName(dir).next();
      var contents = folder.getFiles();
      var file;
      var name = [];
      var date = [];
      var desc = [];

      for (var i = 0; i < contents.length; i++) {

      file = contents[i];

      name[i] = file.getName();
      date[i] = file.getDateCreated();
      desc[i] = file.getDescription();

      };
    };
  </script>
  </head>
      <table style ="width: 100%">
      <tr>
          <th>이름</th>
          <th>제출일</th>
          <th>비고</th>
      <tr>
          <td><p id="name"></p></td>
          <td><p id="date"></p></td>
          <td><p id="desc"></p></td>
      </tr>
      <script type="text/javascript">
          document.getElementById("name").innerHTML = name;
      </script>

      </table>
  </body>
</html>

我试图先只列出文件名,但它从来没有奏效,而且我不知道出了什么问题。如果您能指出哪一部分是错误的以及我必须做什么,我将非常感谢您的帮助。如果有其他更好的方法(不仅是 google-apps-script,还有其他显示文件列表的方法)符合以下条件,我将非常感谢。

  • 列出 google drive 中的文件名
  • 知道链接的任何人都可以查看列表
  • 自动列出更新(无论是定期更新还是发生任何变化时)

【问题讨论】:

    标签: javascript google-apps-script google-drive-api


    【解决方案1】:

    getFiles() 将返回一个FileIterator,它可能没有.length 属性。将循环改成while循环,检查迭代器hasNext是否为true,这样它就会迭代。此外,尝试更改将项目推入数组的方式。查看修改后的 sn-p,希望这可行。

    while (contents.hasNext()){
    
        file = contents.next();
    
        name.push(file.getName());
        date.push(file.getDateCreated());
        desc.push(file.getDescription());
    
    };
    

    接下来会发生什么,如何显示将取决于您。

    【讨论】:

      【解决方案2】:

      正如所写,您的doGet 为网络浏览器提供了一个 HTML 页面,其中嵌入了一些 JS 代码,浏览器将尝试执行该页面。失败了,因为网络浏览器不知道DriveApp;它可以运行 JavaScript,而不是 Apps 脚本。

      可以将execute Apps Script code in scriplets 嵌入到doGet 提供的页面中,但语法需要一段时间才能习惯。

      对于像您这样的简单页面,我只需在 doGet 函数中创建所有 HTML 并提供服务。看我的例子。

      您的代码还有一个问题:folder.getFiles() 返回 file iterator,而不是数组。这是您使用 hasNext 和 next 方法循环的内容,如下所示。

      function doGet(e) {
        var template = '<table style ="width: 100%"><tr><th>name</th><th>Date</th><th>Description</th></tr>APPS_SCRIPT_CONTENT</table>';
        var dir = 'SpinFest2016 KPDS Clips';
        var folder = DriveApp.getFoldersByName(dir).next();
        var contents = folder.getFiles();
        var file, name, date, desc, list = []; 
        while (contents.hasNext()) {
          file = contents.next();
          name = file.getName();
          date = file.getDateCreated();
          desc = file.getDescription();
          list.push('<tr><td>' + name + '</td><td>' + date + '</td><td>' + desc + '</td></tr>');
        }
        var output = HtmlService.createHtmlOutput(template.replace('APPS_SCRIPT_CONTENT', list.join('')));
        return output.setTitle('Directory List').setSandboxMode(HtmlService.SandboxMode.IFRAME);
      }
      

      这将提供一个包含当前目录快照的静态 HTML 文件。如果用户重新加载,他们将获得可能更新的副本。如果目录内容发生变化,文件不会自行更新;我认为这在这个平台上是不可能的。使用运行 Apps Script 代码的 scriplet,可以尝试定期更新,但这似乎不太实际:为什么要将您的 Apps 脚本执行时间配额浪费在打开您的网页并散步的用户身上?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多