Не удалось декодировать строку.(строка 2, файл «Код», проект «ИМЯ ПРОЕКТА») - PullRequest
0 голосов
/ 15 декабря 2018

Я пытался создать HTML-форму, которая загружает файл на диск Google.

вот код, который я использовал в скриптах приложения Google:

function doPost(e) {
  var data = Utilities.base64Decode(e.parameters.data);
  var blob = Utilities.newBlob(data, e.parameters.mimetype, e.parameters.filename);
  DriveApp.createFile(blob);
  return ContentService.createTextOutput("Done.")
}

и вот как выглядит моя HTML-форма:

<form action="https://script.google.com/macros/s/AKfycbx48QW8vH7C0cse4W60VJIXba4MVkUxiuUTaJPZ1_MWwUrODMmp/exec" id="form" method="post">
    <input type="text" placeholder="Name" class="form-control"><br>
    <input type="email" placeholder="Email" class="form-control"><Br>
    <div id="data"></div>
    <input name="file" id="uploadfile" type="file" class="form-control">
    <br><Br>
    <button id="submit" type="submit" class="btn btn-primary form-control">Send</button>
</form>
<script>
    $('#uploadfile').on("change", function () {
        var file = this.files[0];
        var fr = new FileReader();
        fr.fileName = file.name
        fr.onload = function (e) {
            e.target.result
            html = '<input type="hidden" name="data" value="' + e.target.result.replace(/^.*,/, '') + '" >';
            html += '<input type="hidden" name="mimetype" value="' + e.target.result.match(/^.*(?=;)/)[0] + '" >';
            html += '<input type="hidden" name="filename" value="' + e.target.fileName + '" >';
            $("#data").empty().append(html);
        }
        fr.readAsDataURL(file);
    });
</script>

используемый URL https://script.google.com/macros/s/AKfycbx48QW8vH7C0cse4W60VJIXba4MVkUxiuUTaJPZ1_MWwUrODMmp/exec это URL, который я получил после развертывания скрипта в качестве веб-приложения.

Теперь, когда я пытаюсь загрузить файл .txt, он выдает ошибку Could not decode the string. (line 2, file "Code", project "PROJET NAME")

ОБНОВЛЕНИЕ:

Основываясь на @TheMaster Comment, я обнаружил, что мне не нужна декодирующая часть .. поэтому я изменил скрипт google так:

function doPost(e) {
  var blob = Utilities.newBlob(e.parameters.data, e.parameters.mimetype, e.parameters.filename);
  DriveApp.createFile(blob);
  return ContentService.createTextOutput("Done.")
}

Но этодал мне ошибку Invalid argument (line 3, file "Code", project "PROJECT NAME")

1 Ответ

0 голосов
/ 15 декабря 2018

Добро пожаловать на этот:

HTML:

<!DOCTYPE html>
<html>
  <head>
  <script>

  function fileUploadJs(frmData) 
  {
    document.getElementById('status').style.display ='inline';
    google.script.run
      .withSuccessHandler(updateOutput)
      .processForm(frmData)
  };
  function updateOutput(info) 
  {
    var br='<br />';
    var outputDiv = document.getElementById('status');
    outputDiv.innerHTML = br + 'File Upload Successful.' + br + 'File Name: ' + info.name + br + 'Content Type: ' + info.type;
  }
</script>
  </head>
  <body>
    <h1 id="main-heading">Main Heading</h1>
    <div id="formDiv">
      <form id="myForm">
        <input name="fileToLoad" type="file" /><br/>
        <input type="button" value="Submit" onclick="fileUploadJs(this.parentNode)" />
      </form>
    </div>
  <div id="status" style="display: none">
  <!-- div will be filled with innerHTML after form submission. -->
  Uploading. Please wait...
  </div>  
  <div id="controls">
      <input type="button" value="Close" onClick="google.script.host.close();" />
  </div>
</body>
</html>

GS:

function processForm(theForm) {
  var fileBlob = theForm.fileToLoad;
  Logger.log("fileBlob Name: " + fileBlob.getName())
  Logger.log("fileBlob type: " + fileBlob.getContentType())
  Logger.log('fileBlob: ' + fileBlob);
  var fileInfo={'name':fileBlob.getName(),'type':fileBlob.getContentType(), 'size':fileBlob.getBytes()};

  var fldrSssn = DriveApp.getFolderById('FolderId');//put in fetched files
  fldrSssn.createFile(fileBlob);
  return fileInfo;
}

Я просто использую его как диалог, поэтому вам придетсядобавить doGet ();

...