Как добавить выгрузку файла в электронную таблицу как пользовательский пункт меню? - PullRequest
1 голос
/ 05 апреля 2019

Я хочу создать CMS для электронных таблиц, то есть для чтения / записи данных из Firebase и наоборот.Я достиг точки, когда мне нужно загружать файлы непосредственно из электронной таблицы, а не с любой другой страницы.

Я добавил пользовательское меню с htmlService для вывода шаблона, где пользователь может щелкнуть и загрузить файл, и этофайл должен обрабатываться в скрипте Google, но проблема в том, что я получаю только поддельный путь к файлу "c: /fakepath/avatar.png", а не к BLOB-объекту.

мои файлы в скрипте Google:

upload.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
  </head>
  <body>
    <div>
        <div id="progress" ></div>

        <input type="file" name="upload" id="file">
        <input type="submit" value="Submit" class="action" onclick="form_data()" >
        <input type="button" value="Close" onclick="google.script.host.close()" />
    </div>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
    </script>
    <script>
      function form_data(){
        var values = [{
          "file":$("#upload").val(),
        }];

        google.script.run.withSuccessHandler(closeIt).upload(values);
      };

      function closeIt(){
        google.script.host.close()
      };
    </script>
  </body>
</html>

test.gs

function upload(values){
  //Display the values submitted from the dialog box in the Logger. 
  Logger.log(values); // here I'm getting file = c/fakepath/avatar.png while I 
       //need the file to send it as a post request or save it in google drive
};

Я считаю, что должен использовать FileReader, но я попытался и потерпел неудачу:

      var file, 
        reader = new FileReader();

// Upload the file to Google Drive
  reader.onloadend = function(e) {
    google.script.run
      .upload(
         e.target.result, file.name
      );
  };
      function form_data(){
    reader.readAsDataURL(file);
}

custom menu file upload

1 Ответ

2 голосов
/ 05 апреля 2019
  • Вы хотите загрузить файл с помощью диалогового окна в Документах Google на Google Диск.

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Модифицированный скрипт:

Сценарий Google Apps:

function upload(obj) {
  var file = DriveApp.createFile(obj.upload);
  return {
    fileId: file.getId(),
    mimeType: file.getMimeType(),
    fileName: file.getName(),
  };
}

HTML:

Пожалуйста, замените <body>...</body> следующим образом. В этой модификации jquery не используется.

<body>
  <form> <!-- Modified -->
    <div id="progress" ></div>
    <input type="file" name="upload" id="file">
    <input type="button" value="Submit" class="action" onclick="form_data(this.parentNode)" >
    <input type="button" value="Close" onclick="google.script.host.close()" />
  </form>
  <script>
    function form_data(obj){ // Modified
      google.script.run.withSuccessHandler(closeIt).upload(obj);
    };
    function closeIt(e){ // Modified
      console.log(e);
      google.script.host.close();
    };
  </script>
</body>

Примечание:

  • Когда вы загрузили файл, возвращается идентификатор файла, mimeType и имя файла созданного файла. Вы можете увидеть их на консоли.
  • В этом методе, поскольку используется blob, максимальный размер файла составляет 50 МБ. Пожалуйста, будьте осторожны с этим.

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...