Список файлов Google Диска из заданной папки на веб-странице

Я ищу способ перечислить все файлы в определенной папке на 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, но и другие способы отображения списка файлов), который соответствует приведенным ниже условиям, я был бы очень благодарен.

  • список имен файлов на гугл диске
  • любой, у кого есть ссылка, может просмотреть список
  • автоматически обновлять список (периодически или при любых изменениях)

person Canor    schedule 14.03.2016    source источник


Ответы (2)


Как написано, ваш doGet предоставляет веб-браузеру HTML-страницу со встроенным в нее JS-кодом, который браузер попытается выполнить. И потерпите неудачу, так как веб-браузер понятия не имеет о DriveApp; он может запускать JavaScript, а не Apps Script.

Можно выполнить код Apps Script в скриптах, встроенных в страницу. обслуживается doGet, но к синтаксису нужно привыкнуть.

Для такой простой страницы, как ваша, я бы просто создал весь HTML в функции doGet и обслуживал его. Смотрите мой пример.

С вашим кодом возникла еще одна проблема: folder.getFiles() возвращает итератор файлов, а не массив. Это то, что вы перебираете, используя методы 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, можно попытаться периодически обновлять его, но это вряд ли практично: зачем тратить квоту времени выполнения Apps Script на пользователей, которые открыли вашу веб-страницу и пошли прогуляться?

person Community    schedule 14.03.2016

getFiles() вернет FileIterator, у него может не быть свойства .length. Измените цикл на цикл while и проверьте, является ли итератор hasNext true, таким образом он будет выполнять итерацию. Кроме того, попробуйте изменить способ добавления элементов в массив. См. измененный фрагмент, надеюсь, это работает.

while (contents.hasNext()){

    file = contents.next();

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

};

Что будет после этого, как вы это продемонстрируете, зависит от вас.

person adjuremods    schedule 23.03.2016