是否可以使用 Google 选择器上传到子文件夹的根目录?

Is it possible to upload to root of sub-folders with Google picker?

我们有一个可用的 google 文件选择器,但我们的用户因必须 select 文件夹而无法保存在当前文件夹的根目录中而感到困惑。是否有一些选项可用于更改选择器的行为以便可能?或者完全不同的方法?

这是设置 google 选择器行为的 angular 代码的一小段:

    const pickerBuilder = new google.picker.PickerBuilder();

    view = new google.picker.DocsView()
      .setParent('root')
      .setIncludeFolders(true);
    view.setMimeTypes('application/vnd.google-apps.folder')
      .setSelectFolderEnabled(true);
    picker = pickerBuilder
      .enableFeature(google.picker.Feature.NAV_HIDDEN)
      .setOAuthToken(this.oauthToken.access_token)
      .addView(view)
      .addView(new google.picker.DocsUploadView());

如何创建一个用于选择文件夹的选择器,当文件被选中时,使用 DocsUploadView 创建一个新的选择器实例并通过 DocsUploadView.setParent(string) 将父级设置为用户选择。

只是关于如何实现的草图:

首先我们创建两个函数来渲染不同的选择器
function createPickerFolders() {
  const view = new google.picker.DocsView()
    .setIncludeFolders(true)
    .setSelectFolderEnabled(true)
    .setMimeTypes("application/vnd.google-apps.folder");

  const picker = new google.picker.PickerBuilder()
    .addView(view)
    .setAppId(appId)
    .setOAuthToken(oauthToken)
    .setCallback(pickerViewCallback)
    .build();
  picker.setVisible(true);
}

function createPickerUpload(folderId) {
  const view = new google.picker.DocsUploadView().setParent(folderId);

  const picker = new google.picker.PickerBuilder()
    .addView(view)
    .setAppId(appId)
    .setOAuthToken(oauthToken)
    .setCallback(pickerUploadCallback)
    .build();

  picker.setVisible(true);
}
对于 DocsView 的回调,我们创建一个呈现 DocsUploadView 并将其父级设置为所选文件夹的回调
function pickerViewCallback(data) {
  if (data.action == google.picker.Action.PICKED) {
    const folderId = data.docs[0].id;
    createPickerUpload(folderId);
  }
}

这样我们就实现了用户选择的文件夹就是文件上传到的文件夹。

文档:

基本上我们最终给了我们的用户 2 个选择:

  • 保存到根目录
  • 保存到文件夹

这不是最佳解决方案,但它可以保存在根目录中,并且通过保存文本提及文件夹,它会提示用户常规保存功能的工作原理。