首页 > 解决方案 > Google Drive Picker:使用 Feature.MINE_ONLY 和 Feature.SUPPORT_DRIVES

问题描述

我正在尝试创建一个显示以下视图的 Google Drive Picker:

  1. “文件夹”视图,显示当前用户的文件夹树,允许他只选择当前用户拥有的文件

  2. “最近”视图,显示当前用户拥有的最新打开的文件

  3. “共享云端硬盘”视图(注意:以前称为“团队云端硬盘”),显示当前用户有权访问的共享云端硬盘(他不是文件的所有者,因为共享云端硬盘文件归 G Suite 平台所有用户)

第一次尝试:Feature.MINE_ONLYFeature.SUPPORT_DRIVES

我尝试的第一件事是同时启用MINE_ONLYSUPPORT_DRIVES上的功能PickerBuilder,但是这会导致“共享驱动器”视图为空,因为用户不是共享驱动器中文件的所有者(请参阅上面的说明)。

第二次尝试:Features.SUPPORT_DRIVE+setOwnedByMe(true)

我尝试的第二件事是仅启用该SUPPORT_DRIVES功能,并setOwnedByMe(true)在“文件夹”和“最近”视图上使用该方法。

它几乎可以按预期工作,但是“文件夹”视图没有显示文件夹,因为该setOwnedByMe函数不能与setIncludeFolders视图(参考)一起调用。

以下是我第二次尝试的代码的简化版本(我故意没有放验证码):

var googlePicker = new google.picker.PickerBuilder();

// KO: DOES NOT DISPLAY THE FOLDERS
var folderView = new google.picker.DocsView().
    //setIncludeFolders(true). // -> cannot be used with setOwnedByMe, else it overrides it
    setOwnedByMe(true).
    setParent('root');

// OK
var recentFilesView = new google.picker.DocsView(google.picker.ViewId.DOCS).
    setOwnedByMe(true);

// OK
var sharedDriveview = new google.picker.DocsView().
    setIncludeFolders(true).
    setSelectFolderEnabled(false).
    setEnableDrives(true);

googlePicker.enableFeature(google.picker.Feature.SUPPORT_DRIVES); // previously named SUPPORT_TEAM_DRIVES
//googlePicker.enableFeature(google.picker.Feature.MINE_ONLY); // NOT working properly with setEnableDrives

googlePicker.
    addView(folderView).
    addView(recentFilesView).
    addView(sharedDriveview);

googlePicker.build().setVisible(true);

标签: google-drive-apigoogle-pickergoogle-drive-shared-drivegoogle-drive-picker

解决方案


回答:

不幸的是,这似乎是不可能的。

推理:

正如您在问题中指出的那样,这里的问题归结为以下三件事:

  1. 要查看共享驱动器,DocsView.setEnableDrives()需要设置为true,并且Feature.SUPPORT_DRIVES需要打开。这可以与两者结合使用,也可以单独DocsView.setOwnedByMe()使用DocsView.setInculudeFolders()
  2. 要查看当前用户拥有的文件,DocsView.setOwnedByMe()需要设置为true,或者Feature.MINE_ONLY需要打开。Docsview.setOwnedByMe()可以与 一起使用DocsView.setEnableDrives(),但不能与 一起使用DocsView.setIncludeFolders()
  3. 要在 Drive 视图中查看文件夹,DriveView.setIncludeFolders()需要设置为true,但不能同时设置,因为设置时会忽略DriveView.setOwnedByMe()的值。DriveView.setOwnedByMe()DriveView.setIncludeFolders()

可能的解决方法:

由于 Picker 一次只能呈现一个视图,因此您可以创建一种方法,在创建 Picker 之前从用户那里获取有关是访问 Shared Drive 还是 Personal Drive 的信息,并为自定义设置功能和包含使成为。这可以通过多种方式(例如按钮、HTML 单选按钮或引导选项卡)来完成,这些方式会更改页面上可见的 Picker。

功能要求:

我已代表您在 Google 的问题跟踪器上提交了功能请求。此功能请求可在此处找到,您可以在左上角打星 (☆),让 Google 知道更多人希望此请求。

参考:


推荐阅读