How to select file OR folder in file dialog

别等时光非礼了梦想. 提交于 2021-02-06 09:14:03

问题


How would someone open up a file dialog in Node.js / electron to be able to select either a folder or a file.

When I use

<input type="file"/> 

it will open up the file dialog but won't allow me to select a folder. But when I try

<input type="file" webkitdirectory/> 

it will open up the dialog, but won't allow for folder selection.

What I want to do is just have one input button, or doesn't really have to be a button, but a way to launch the native system file explorer for both possibilities.


回答1:


You can initiate a file system open dialog from a Renderer Process (a browser window).

On your Main Process, you are listening to the Renderer Process, in case of open-file-dialog command is sent from the Renderer Process, the Main Process will display an Open File Dialog per the Operating System (As demonstrated below, an ['openFile'] property is being sent, and you can also use ['openDirectory'] for Open Directory dialog, or both of them) and will send back the selected file\path to the Renderer Process.

Renderer process

//Adding an event listener to an html button which will send open-file-dialog to the main process
const ipc = require('electron').ipcRenderer
const selectDirBtn = document.getElementById('select-file')

selectDirBtn.addEventListener('click', function (event) {
     ipc.send('open-file-dialog')
});

//Getting back the information after selecting the file
ipc.on('selected-file', function (event, path) {

//do what you want with the path/file selected, for example:
document.getElementById('selected-file').innerHTML = `You selected: ${path}`

});

Main Process

//listen to an open-file-dialog command and sending back selected information
const ipc = require('electron').ipcMain
const dialog = require('electron').dialog
ipc.on('open-file-dialog', function (event) {
  dialog.showOpenDialog({
    properties: ['openFile']
  }, function (files) {
    if (files) event.sender.send('selected-file', files)
  })
})



回答2:


Try adding directory as well as webkitdirectory. Otherwise see these:

Directory Chooser in HTML page

How to get folder directory from HTML input type "file" or any other way?




回答3:


For anyone that is running into similar trouble, this only works for electron. But electron has a funky file dialog API built in that is a bit more flexible than the native HTML one.

The code looks something like this

    const {dialog} = require('electron').remote;

    dialog.showOpenDialog({
      properties: ["openDirectory","openFile"]
    },function (fileNames) {
      // do cool stuff here
    });


来源:https://stackoverflow.com/questions/44773029/how-to-select-file-or-folder-in-file-dialog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!