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():获取文件的二进制内容,用于上传到DrivegetSize():获取文件大小(字节)getContentType():获取文件的MIME类型
- 权限注意:第一次运行脚本时,需要授权Drive访问权限,确保脚本有权限写入指定文件夹。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

