首页 > 解决方案 > 如何使用 JXBrowser 上传整个目录,而不仅仅是多个文件

问题描述

自 2011 年以来,Chrome 就支持 html 'input' 元素的非标准 'webkitdirectory' 属性,并且效果很好。代码笔示例

我想运行 jxbrower。截至 2018 年 5 月 21 日星期一的最新版本基于 Chromium 64.0.3282.24(2017 年 12 月 12 日),但不支持此属性。

我错过了什么?任何建议将不胜感激。

<html>
      <div>
        <label for="uploaddir" style="width: 600px; background: #ccc;border: 1px solid black;">Choose directory to upload</label>
        <input type="file" id="uploaddir" webkitdirectory onchange="updateImageDisplay()" style="opacity:0;">
      </div>
      <div>
        <ul id="listing"></ul>
      </div>
</html>

<script>
    var input = document.getElementById('uploaddir');
    var output = document.getElementById('listing');

    function updateImageDisplay() {
      while (output.firstChild) {
        output.removeChild(output.firstChild);
      }
      var curFiles = input.files;
      for (let i = 0; i < curFiles.length; i++) {
        const item = document.createElement('li');
        item.innerHTML = `${curFiles[i].webkitRelativePath} (${curFiles[i].size} bytes)`;
        output.appendChild(item);
      }
    }
</script>

标签: jxbrowser

解决方案


JxBrowser 可以上传整个目录。在您的情况下可能有问题的是未配置为选择目录的文件选择器对话框。

我做了一个简单的例子来演示如何在 swing 中配置文件选择器对话框:

browser.setDialogHandler(new DefaultDialogHandler(view) {
    @Override
    public CloseStatus onFileChooser(FileChooserParams params) {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) {
            File selectedFile = fileChooser.getSelectedFile();
            params.setSelectedFiles(selectedFile.getAbsolutePath());
            return CloseStatus.OK;
        }
        return CloseStatus.CANCEL;
    }
});

推荐阅读