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

如何在同一会话中持久化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):设置是否允许多选文件,默认是false
  • setSelectFolderEnabled(boolean):设置是否允许用户选择文件夹(如果你的场景需要的话)
  • setTitle(titleText):自定义Picker的标题文本

三、Picker result对象核心属性

你之前找不到详细说明,这里列几个最实用的:

  • selectedDocuments:用户选中的文件数组,每个元素包含id(文件ID)、name(文件名)、mimeType(文件类型)、url(文件链接)等属性
  • currentFolderId:用户关闭Picker时最后停留的文件夹ID
  • currentFolderName:最后停留的文件夹名称
  • cancelled:布尔值,标记用户是否取消了Picker操作(true表示取消,false表示完成选择)

这样配置后,不管用户是直接在页面2重复打开Picker,还是返回页面1重新选择学生后再回来,Picker都会自动跳转到上次访问的文件夹,完全符合你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:35:43