将 HTML 表单与 Google Apps 脚本集成,但无法上传图片

问题描述 投票:0回答:1

我已经用 HTML 构建了一个表单,并且它基本上已正确提交到 Google Apps 脚本中。它将信息输入到 Google 表格中,根据提交表单的人员创建自定义文件夹,根据该人员的提交创建 PDF,然后将其上传到相应人员的文件夹中。

我也在尝试获取上传图片的表格。我不想重写我的整个表单/代码只是为了添加此上传图片功能,并且根据我所看到的,它不应该太复杂。该 blob 似乎已添加到表单提交中,并且我尝试了六种不同的方法来在 Apps 脚本中检索该 blob,但似乎没有任何内容真正将文件下载到 Google Drive 中。

我应该注意,我没有在 Index.html 文件中的 Apps 脚本中构建 HTML。我宁愿将我的 html 单独嵌入到我的网页中,然后使用 fetch API 调用 Apps 脚本代码。虽然,我的代码几乎是 google 结果、ChatGPT 和 Google Gemini 的组合......所以我愿意接受建议/建议

我的 HTML 表单非常简单,因此我将在下面附上相关的 JS 和 Apps 脚本代码:

<script>
     window.addEventListener("load", function() {
          const form = document.getElemntById('TestForm');
          form.addEventListener("submit", function(e) {
               e.preventDefault();

               const data = newFormData(form);

               const action = e.target.action;
               fetch(action, {
                    method: 'POST',
                    body: data
               })
               .then(response => {
                    if (!response.ok) {
                         throw new Error('HTTP error! Status: ${response.status}');
                    }
                    return response.text();
               .catch(error => {
                    console.error('Error during form submission:', error);
               });
          })
     })
</script>
function doPost(e) {
     try {
          const pictureFolderId = "PICTURE-FOLDER-ID";
          const pictureFolder = DriveApp.getFolderById(pictureFolderId)
          uploadImage(e, pictureFolder)
     } catch (error) {
          //Logging errors and such
     }
}

function uploadImage(e, pictureFolder) {
     const file = e.parameters.file[0];
     const imageBlob = file.getAs(MimeType.PNG)

     pictureFolder.createFile(imageBlob);
}

最后一个函数 uploadImage() 是我认为问题所围绕的。我尝试了不同的方法来检索斑点,但我似乎无法弄清楚。我也尝试过使用

Utilities.newblob(file.getByes())
,但没有成功。我也尝试过使用
e.getBlob()
,尽管这似乎不起作用。看起来应该很简单,但显然并非如此。至少对于我来说。有人可以帮助我,和/或解释为什么我正在尝试的方法不起作用吗?

javascript google-apps-script
1个回答
0
投票

以下代码对我有用:

function uploadFileToGoogleDrive(e, dropbox) {
  var folder, folders = DriveApp.getFoldersByName(dropbox);

  if (folders.hasNext()) {
    folder = folders.next();
  } else {
    folder = DriveApp.createFolder(dropbox);
  }

  var data = e.parameter.fileContent;
  var filename = e.parameter.filename;
  var contentType = data.substring(5, data.indexOf(';')),
    bytes = Utilities.base64Decode(data.substr(data.indexOf('base64,') + 7)),
    blob = Utilities.newBlob(bytes, contentType, filename);
  var file = folder.createFile(blob);
  return file.getId();
}
© www.soinside.com 2019 - 2024. All rights reserved.