You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script:读取云函数传递的表单对象中的文件方法

解决Google Apps Script中表单文件上传到Drive的问题

核心处理逻辑

当通过google.script.run将表单对象传递到Code.gs后,表单中的文件会被封装为File对象数组,你可以通过表单输入框的name属性直接访问。以下是完整的实现步骤和代码修改:


1. 修改Code.gs的uploadFiles函数

在这个函数里,你可以遍历文件数组,获取文件名、文件内容,并上传到指定的Drive文件夹:

const folderId = "your-folder-id";
const folder = DriveApp.getFolderById(folderId);

function doGet() {
  return HtmlService.createTemplateFromFile("index").evaluate();
}

function include(fileName) {
  return HtmlService.createHtmlOutputFromFile(fileName).getContent();
}

function uploadFiles(formObject) {
  // 通过表单输入的name属性获取文件数组(对应input name="myFile")
  const files = formObject.myFile;
  const uploadResults = [];

  // 遍历每个上传的文件
  for (let i = 0; i < files.length; i++) {
    const file = files[i];
    // 获取文件名
    const fileName = file.getName();
    // 获取文件二进制内容
    const fileBlob = file.getBlob();
    
    // 上传到Drive文件夹,默认会使用Blob的名称,也可以手动指定
    const driveFile = folder.createFile(fileBlob);
    // 可选:确保文件名和上传的一致(若Blob名称有异常时使用)
    driveFile.setName(fileName);

    // 收集上传结果信息,返回给前端
    uploadResults.push({
      fileName: fileName,
      fileId: driveFile.getId(),
      fileUrl: driveFile.getUrl()
    });
  }

  return uploadResults;
}

2. 完善前端反馈逻辑(script.html)

添加成功/失败回调,让用户知道上传状态:

<script>
  function preventFormSubmit() {
    const form = document.getElementById("myForm")
    form.addEventListener("submit", (e) => {
      e.preventDefault();
    });
  }

  window.addEventListener("load", preventFormSubmit);

  function handleFormSubmit(formObject) {
    google.script.run
      .withSuccessHandler((results) => {
        // 上传成功时提示用户
        alert(`成功上传 ${results.length} 个文件:\n${results.map(item => item.fileName).join('\n')}`);
        // 重置表单
        document.getElementById("myForm").reset();
      })
      .withFailureHandler((error) => {
        // 上传失败时提示错误信息
        alert(`上传失败:${error.message}`);
      })
      .uploadFiles(formObject);
  }
</script>

关键知识点

  • 访问文件数据:表单中的文件存储在formObject[input的name属性]中,因为你的input设置了name="myFile",所以用formObject.myFile获取。
  • File对象方法:
    • getName():获取上传文件的原始文件名
    • getBlob():获取文件的二进制内容,用于上传到Drive
    • getSize():获取文件大小(字节)
    • getContentType():获取文件的MIME类型
  • 权限注意:第一次运行脚本时,需要授权Drive访问权限,确保脚本有权限写入指定文件夹。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:01:19