列出网页上给定文件夹中的 Google 个云端硬盘文件

List Google Drive files from a given folder on a webpage

我正在寻找一种方法来列出特定 google 驱动器文件夹中的所有文件,它还会自动更新列表,并让每个人都可以查看。我发现有相当多的文章创建了一个电子表格来列出它们,但它们不会自行更新。我只能理解 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,还有其他显示文件列表的方式)适合以下条件,我将非常感激。

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

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

对于像您这样的简单页面,我会在 doGet 函数中创建所有 HTML,然后提供。看我的例子。

您的代码还有一个问题:folder.getFiles() returns 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 文件。如果用户重新加载,他们将获得可能更新的副本。如果目录内容更改,文件不会自行更新;我认为这在这个平台上什至不可能。使用 scriplet 运行ning Apps Script 代码,可以尝试定期更新,但这似乎不太实际:为什么要将 Apps Script 执行时间配额浪费在打开您的网页并出去走走的用户身上?

getFiles() will return a FileIterator,可能没有.length属性。将循环更改为 while 循环并检查迭代器 hasNext 是否为 true,这样它就会迭代。另外,尝试更改将项目推入数组的方式。查看修改后的代码段,希望这有效。

while (contents.hasNext()){

    file = contents.next();

    name.push(file.getName());
    date.push(file.getDateCreated());
    desc.push(file.getDescription());

};

之后会发生什么,如何显示将由您决定。