首页 > 解决方案 > Google Scripts/HTML/JavaScript Upload File to Folder 错误参数不能为空:blob

问题描述

我正在创建一个在线 HTML 表单,让人们可以选择上传文件。我正在使用谷歌表格来收集数据,所以我正在使用他们的谷歌脚本功能。当我运行我的代码时,一切正常,这意味着我将数据插入到单元格中,但不是文件上传。这是我用于文件上传的 Google Scripts 代码:

function doGet(request) {
  return HtmlService.createTemplateFromFile('Index')
      .evaluate();
}

/* @Include JavaScript and CSS Files */
function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}

function uploadFiles(data){
  var folder = DriveApp.getFolderById('1pp1ELzGa2fZqU4IHAasZMHsmYx19pnYv');
  var createFile = folder.createFile(data.image);
  return createFile.getUrl();
}

据我所知,问题出在data.image. 这是我试图检索我的图像的地方,以便我可以将其上传到文件夹中。一定uploadFiles(data)是没有正确引入data

这是 HTML 和 JavaScript:

<form id="myForm" onsubmit="handleFormSubmit(this)">
        <h1 class="h4 mb-4 text-center" style="text-align:center"> <center>File Upload Testing</center></h1>
        
        <table>
          <tr>
            <td colspan="11"><input type="file" id="image"></td>
          </tr>
          <input type="hidden" id="fileURL" name="fileURL">
        </table>
        <button type="submit" class="button button1" id="submitBtn">Submit</button>
      </form>
      <script>          
        document.getElementById('submitBtn').addEventListener('click', 
          function(e){
            google.script.run.withSuccessHandler(onSuccess).uploadFiles(this.parentNode);;}
        )

        function onSuccess(data){
          document.getElementById("fileURL").value = data;
        }
      </script>

我有一种感觉,该e参数没有检索上面的数据,但是我并不真正了解它是如何工作的。也可能this.parentNode是没有抓住fike。

我正在使用 onSuccess 函数来检索链接,因此我可以将其放入我的谷歌表格以便快速访问。

这是我收到的错误; 在此处输入图像描述

这是 google 表格的链接。要访问 google 脚本,请转到“工具 -> 脚本编辑器”。 https://docs.google.com/spreadsheets/d/16w8uB4OZHCeD7cvlrUv5GHP72CWxQhO1AAkF9MMSpoE/edit?usp=sharing

这是我尝试使用的另一种技术:Javascript:

function uploadthis(fileForm){
          const file = fileForm.image.files[0];
          const fr = new FileReader();
          fr.onload = function(e) {
            const obj = {
              // filename: file.name
              mimeType: file.type,
              bytes: [...new Int8Array(e.target.result)]
            };
            google.script.run.withSuccessHandler((e) => console.log(e)).uploadFiles(obj);
          };
          fr.readAsArrayBuffer(file);
          }

谷歌脚本:

function uploadFiles(data){  
  var file = Utilities.newBlob(data.bytes, data.mimeType);  // Modified
  var folder = DriveApp.getFolderById('1pp1ELzGa2fZqU4IHAasZMHsmYx19pnYv');
  var createFile = folder.createFile(file);
  return createFile.getId();  // Added
}

谢谢!

标签: javascripthtmlgoogle-apps-script

解决方案


推荐阅读