Google Drive Picker:使用 Feature.MINE_ONLY 和 Feature.SUPPORT_DRIVES
Google Drive Picker: Use Feature.MINE_ONLY along with Feature.SUPPORT_DRIVES
我正在尝试创建一个显示以下视图的 Google 驱动器选择器:
一个"folder"视图,显示当前用户的文件夹树,让他只能选择当前用户拥有的文件
一个"recent"视图,显示当前用户拥有的最近打开的文件
A "shared drives" 视图(注意:以前命名为 "team drives"),显示他有权访问的当前用户的共享驱动器(他不是文件的所有者,因为共享云端硬盘文件归用户的 G Suite 平台所有)
第一次尝试:Feature.MINE_ONLY
和 Feature.SUPPORT_DRIVES
我尝试的第一件事是在 PickerBuilder
上启用 MINE_ONLY
和 SUPPORT_DRIVES
这两个功能,但是它会导致 "shared drives" 视图为空,因为用户不是共享驱动器中文件的所有者(参见上面的解释)。
第二次尝试:Features.SUPPORT_DRIVE
+ setOwnedByMe(true)
我尝试的第二件事是仅启用 SUPPORT_DRIVES
功能,并在 "folder" 和 "recent" 视图上使用 setOwnedByMe(true)
方法。
它几乎按预期工作,但是 "folder" 视图不显示文件夹,因为 setOwnedByMe
函数无法与 setIncludeFolders
视图一起调用(reference ).
以下是我第二次尝试的简化版代码(我故意没有放验证码):
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);
答案:
不幸的是,这似乎是不可能的。
推理:
正如您在问题中指出的,这里的问题归结为以下三点:
- 要查看共享驱动器,
DocsView.setEnableDrives()
需要设置为 true
,并且 Feature.SUPPORT_DRIVES
需要打开。这可以单独与 DocsView.setOwnedByMe()
和 DocsView.setInculudeFolders()
结合使用。
- 要查看当前用户拥有的文件,
DocsView.setOwnedByMe()
需要设置为true
,或者Feature.MINE_ONLY
需要打开。 Docsview.setOwnedByMe()
可以与 DocsView.setEnableDrives()
一起使用,但 不能 与 DocsView.setIncludeFolders()
.
- 要在驱动器视图中查看文件夹,
DriveView.setIncludeFolders()
需要设置为true
,但不能与DriveView.setOwnedByMe()
同时设置为[=的值设置 DriveView.setIncludeFolders()
时忽略 23=]。
可能的解决方法:
由于 Picker 一次只能呈现一个视图,因此您可以创建一种方法,在创建 Picker 之前从用户那里获取有关是访问共享驱动器还是个人驱动器的信息,并设置功能并包括自定义渲染。这可以通过多种方式(例如按钮、HTML 单选按钮或 bootstrap 选项卡)来完成,这会改变页面上可见的选择器。
功能请求:
我已代表您在 Google 的问题跟踪器上为此提交了功能请求。这个功能请求可以在 here 找到,你可以在左上角给一个星号 (☆) 让 Google 让更多人知道这个请求。
参考文献:
我正在尝试创建一个显示以下视图的 Google 驱动器选择器:
一个"folder"视图,显示当前用户的文件夹树,让他只能选择当前用户拥有的文件
一个"recent"视图,显示当前用户拥有的最近打开的文件
A "shared drives" 视图(注意:以前命名为 "team drives"),显示他有权访问的当前用户的共享驱动器(他不是文件的所有者,因为共享云端硬盘文件归用户的 G Suite 平台所有)
第一次尝试:Feature.MINE_ONLY
和 Feature.SUPPORT_DRIVES
我尝试的第一件事是在 PickerBuilder
上启用 MINE_ONLY
和 SUPPORT_DRIVES
这两个功能,但是它会导致 "shared drives" 视图为空,因为用户不是共享驱动器中文件的所有者(参见上面的解释)。
第二次尝试:Features.SUPPORT_DRIVE
+ setOwnedByMe(true)
我尝试的第二件事是仅启用 SUPPORT_DRIVES
功能,并在 "folder" 和 "recent" 视图上使用 setOwnedByMe(true)
方法。
它几乎按预期工作,但是 "folder" 视图不显示文件夹,因为 setOwnedByMe
函数无法与 setIncludeFolders
视图一起调用(reference ).
以下是我第二次尝试的简化版代码(我故意没有放验证码):
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);
答案:
不幸的是,这似乎是不可能的。
推理:
正如您在问题中指出的,这里的问题归结为以下三点:
- 要查看共享驱动器,
DocsView.setEnableDrives()
需要设置为true
,并且Feature.SUPPORT_DRIVES
需要打开。这可以单独与DocsView.setOwnedByMe()
和DocsView.setInculudeFolders()
结合使用。 - 要查看当前用户拥有的文件,
DocsView.setOwnedByMe()
需要设置为true
,或者Feature.MINE_ONLY
需要打开。Docsview.setOwnedByMe()
可以与DocsView.setEnableDrives()
一起使用,但 不能 与DocsView.setIncludeFolders()
. - 要在驱动器视图中查看文件夹,
DriveView.setIncludeFolders()
需要设置为true
,但不能与DriveView.setOwnedByMe()
同时设置为[=的值设置DriveView.setIncludeFolders()
时忽略 23=]。
可能的解决方法:
由于 Picker 一次只能呈现一个视图,因此您可以创建一种方法,在创建 Picker 之前从用户那里获取有关是访问共享驱动器还是个人驱动器的信息,并设置功能并包括自定义渲染。这可以通过多种方式(例如按钮、HTML 单选按钮或 bootstrap 选项卡)来完成,这会改变页面上可见的选择器。
功能请求:
我已代表您在 Google 的问题跟踪器上为此提交了功能请求。这个功能请求可以在 here 找到,你可以在左上角给一个星号 (☆) 让 Google 让更多人知道这个请求。