2016-07-22 15 views
2

Ich bin buildind jetzt GUI mit Electron. (wie PhoneGap für Desktop-Anwendungen)Electron: Holen Sie sich den vollständigen Pfad der hochgeladenen Datei

Gibt es eine Möglichkeit, den vollständigen Pfad für die Datei aktiviert in <input type="file"> zu aktivieren?
Jetzt von C:\fakepath\dataset.zip installiert. (Der Verzeichnisname ist nicht "fakepath", aber das ist der Wert document.getElementById("myFile").value)

Oder gibt es andere Möglichkeit, eine Datei auszuwählen?

+2

'C: \ fakepath \ dataset.zip' ist ein vollständiger Pfad. Was meinen Sie? –

+0

Nein, der Verzeichnisname ist nicht "fakepath", sondern genau das, was ich von "document.getElementById (" myFile "). Value" bekomme. –

+0

Sie können Eingabedateien nicht so erhalten. –

Antwort

7

Electron fügt eine path Eigenschaft File Objekte, so können Sie den tatsächlichen Pfad von dem Eingangselement erhalten mit:

document.getElementById("myFile").files[0].path 
1

Es ist aus Sicherheitsgründen nicht möglich, das zu tun, was Sie versuchen, gemäß dieser Antwort How to get full path of selected file on change of <input type=‘file’> using javascript, jquery-ajax?.

Sie könnten jedoch eine Arbeit wie in einem Elektronprojekt, an dem ich arbeitete, tun.

  1. erstellen HTML-Schaltfläche
  2. Dann im Renderer-Prozess ein Ereignis-Listener Sie vor erstellt die Schaltfläche erstellen.

    const ipc = require('electron').ipcRenderer; 
    const buttonCreated = document.getElementById('button-created-id'); 
    
    buttonCreated.addEventListener('click', function (event) { 
        ipc.send('open-file-dialog-for-file') 
    }); 
    
  3. Dann im Hauptprozess verwenden Sie die showOpenDialog eine Datei zu wählen, und dann die full path zurück an den Renderer-Prozess senden.

    ipc.on('open-file-dialog-for-file', function (event) { 
    if(os.platform() === 'linux' || os.platform() === 'win32'){ 
        dialog.showOpenDialog({ 
         properties: ['openFile'] 
        }, function (files) { 
         if (files) event.sender.send('selected-file', files[0]); 
        }); 
    } else { 
        dialog.showOpenDialog({ 
         properties: ['openFile', 'openDirectory'] 
        }, function (files) { 
         if (files) event.sender.send('selected-file', files[0]); 
        }); 
    }}); 
    
  4. Dann im Renderer-Prozess Sie die full path bekommen.

    ipc.on('selected-file', function (event, path) { 
        console.log('Full path: ', path); 
    }); 
    

So können Sie ein ähnliches Verhalten als die Eingabetyp-Datei und den vollständigen Pfad bekommen.

+0

* "Aus Sicherheitsgründen ist es nicht möglich, das zu tun, was Sie versuchen" * - Dies gilt für Endbenutzerbrowser, aber nicht für Electron. Ich glaube, Sie können einfach 'input.files [0] .path' verwenden, was auch in der [derzeit akzeptierten Antwort] beschrieben wird (http://stackoverflow.com/a/38549837/2788872). –

-1
<script>const electron = require('electron');</script> 
<button id="myFile" onclick="this.value=electron.remote.dialog.showOpenDialog()[0]">UpdateFile</button> 

nun die document.getElementById("myFile").value würde den vollständigen Pfad der ausgewählten Datei enthalten.

Verwandte Themen