如何获取Google表单多文件上传ID并保存至指定文件夹?
解决Google表单多文件上传后移动到指定文件夹的问题
嘿,我刚好处理过类似的需求,你的核心问题是没搞清楚多文件上传响应的返回格式,还混淆了表单问题ID和文件ID,让我一步步帮你搞定:
问题分析
你之前用getItem().getID()拿到的是表单中那个文件上传问题的ID,不是用户上传文件的ID,这就跑偏了。另外,允许多文件上传的问题,getResponse()返回的是一个文件ID数组,不是单个值,所以需要循环处理每个ID。
完整解决方案代码
我重新写了更高效的脚本,直接利用表单提交触发事件e来获取响应,不用遍历所有历史提交:
function onFormSubmit(e) { // 从触发事件中直接获取当前提交的响应(比遍历所有响应高效得多) const formResponse = e.response; // 获取所有问题的响应,这里假设多文件上传是第2个问题(索引为1,从0开始计数) const itemResponses = formResponse.getItemResponses(); const fileUploadItemResponse = itemResponses[1]; // 关键:多文件上传的响应是一个包含所有上传文件ID的数组 const uploadedFileIds = fileUploadItemResponse.getResponse(); // -------------------------- // 你的目标文件夹创建逻辑(这里给个示例,你可以替换成自己的代码) const parentFolderId = "替换成你的父文件夹ID"; // 比如你要存文件的Drive文件夹ID const parentFolder = DriveApp.getFolderById(parentFolderId); // 可以用提交时间或者表单里的其他字段命名文件夹,比如这里用时间戳 const submitTime = new Date().toLocaleString().replace(/[\/:, ]/g, "-"); const targetFolder = parentFolder.createFolder(`表单提交_${submitTime}`); // -------------------------- // 循环处理每个上传的文件,移动到目标文件夹 uploadedFileIds.forEach(fileId => { try { const file = DriveApp.getFileById(fileId); // 移动文件到目标文件夹(原位置的文件会被移除,如果你想复制可以用makeCopy) file.moveTo(targetFolder); console.log(`成功移动文件:${file.getName()} 到文件夹:${targetFolder.getName()}`); } catch (error) { console.error(`处理文件ID ${fileId} 失败:${error.message}`); } }); }
关键要点说明
- 正确获取文件ID:
fileUploadItemResponse.getResponse()返回的是数组,每个元素就是用户上传文件的真实ID,这才是你需要用来操作文件的标识。 - 高效利用触发事件:用
e.response直接获取当前提交的响应,避免了遍历所有历史提交的低效操作,尤其是表单提交量很大的时候。 - 移动文件的逻辑:
file.moveTo(targetFolder)会把文件从默认的“Google表单上传”文件夹移动到你指定的文件夹;如果想保留原文件,改用file.makeCopy(targetFolder)即可。 - 权限注意:第一次运行脚本时,需要授权脚本访问你的Google Drive,按照提示完成授权就行。
内容的提问来源于stack exchange,提问作者E. Tocchi
相关产品推荐
相关产品推荐

