如何在同一会话中持久化Drive Picker的上次访问文件夹状态?
实现Drive Picker记忆上次访问文件夹 + 组件属性详解
当然可以实现让Picker记住上次访问文件夹的需求!同时我也会把你困惑的Drive Picker组件选项和result对象属性梳理清楚,帮你彻底解决问题。
一、核心实现思路:存储并复用上次访问的文件夹ID
关键就是在用户每次关闭Picker时,捕获最后停留的文件夹ID,把它存在页面属性或会话存储里,下次打开Picker时直接指定这个ID作为初始文件夹。
1. 获取上次访问的文件夹ID
Drive Picker的result对象里其实自带了用户最后停留的文件夹信息——currentFolderId属性,这正是你需要的!之前你用widget.selectedDocuments处理选中文件,现在可以同时从result里提取这个ID。
2. 存储文件夹ID
你可以根据需求选择存储位置:
- 如果只需要在页面2内记忆,存在页面2的自定义属性里:
// 在Picker选择完成后执行 page2.properties.set('lastDriveFolderId', result.currentFolderId); - 如果需要跨页面(比如从页面1返回页面2后仍保留),存在会话存储里:
sessionStorage.setItem('lastDriveFolderId', result.currentFolderId); - 要是想针对不同学生保存不同的历史文件夹,就把学生ID和文件夹ID关联存储:
let selectedStudentId = page1.properties.get('selectedStudentId'); page2.properties.set(`lastDriveFolderId_${selectedStudentId}`, result.currentFolderId);
3. 下次打开Picker时指定初始文件夹
在打开Picker的脚本里,先读取存储的ID,然后用setInitialFolder()方法设置初始位置:
function openDrivePicker() { // 读取存储的文件夹ID,默认用根目录 let lastFolderId = page2.properties.get('lastDriveFolderId') || 'root'; // 配置Picker let picker = widget.drivePicker; picker.setInitialFolder(lastFolderId); // 关键:设置初始文件夹 picker.setAllowedMimeTypes(['image/jpeg', 'image/png']); // 限制只选图片 picker.setAllowMultipleSelections(true); // 允许多选 // 打开Picker并处理结果 picker.open().then(result => { if (!result.cancelled) { // 处理文件复制逻辑(用你之前的widget.selectedDocuments也可以,这里用result更直接) let targetFolderId = page1.properties.get('selectedStudentFolderId'); result.selectedDocuments.forEach(doc => { DriveApp.getFileById(doc.id).makeCopy(doc.name, DriveApp.getFolderById(targetFolderId)); }); // 存储这次的最后访问文件夹ID page2.properties.set('lastDriveFolderId', result.currentFolderId); } }); }
二、Drive Picker组件常用选项
这里整理几个你可能用到的核心配置选项:
setInitialFolder(folderId):设置Picker打开时的初始文件夹,传入文件夹ID即可,默认是Drive根目录setAllowedMimeTypes(mimeTypeArray):限制用户只能选择指定类型的文件,比如图片就传['image/jpeg', 'image/png', 'image/gif']setAllowMultipleSelections(boolean):设置是否允许多选文件,默认是falsesetSelectFolderEnabled(boolean):设置是否允许用户选择文件夹(如果你的场景需要的话)setTitle(titleText):自定义Picker的标题文本
三、Picker result对象核心属性
你之前找不到详细说明,这里列几个最实用的:
selectedDocuments:用户选中的文件数组,每个元素包含id(文件ID)、name(文件名)、mimeType(文件类型)、url(文件链接)等属性currentFolderId:用户关闭Picker时最后停留的文件夹IDcurrentFolderName:最后停留的文件夹名称cancelled:布尔值,标记用户是否取消了Picker操作(true表示取消,false表示完成选择)
这样配置后,不管用户是直接在页面2重复打开Picker,还是返回页面1重新选择学生后再回来,Picker都会自动跳转到上次访问的文件夹,完全符合你的需求!
内容的提问来源于stack exchange,提问作者Scott Robinson
相关产品推荐
相关产品推荐

