Verzeichnisauswahl in HTML-Seite


70

Wie kann ich eine Verzeichnisauswahl auf einer HTML-Seite erstellen?
Wenn ich ein Eingabedateielement verwende, kann ich nur die Datei auswählen, aber ich muss stattdessen das Verzeichnis auswählen.
Ich muss dies tun, weil der Benutzer einen richtigen Pfad in seinem Computer auswählen sollte.
Irgendwelche Lösungen?


2
Es ist jetzt mit HTML5 möglich, zumindest in Chrome: stackoverflow.com/questions/24718769/…
mtyson

Bitte sehen Sie diesen Link:
Geben Sie

Antworten:


34

Kann aus Sicherheitsgründen nicht in reinem HTML / JavaScript ausgeführt werden.

Die Auswahl einer Datei zum Hochladen ist das Beste, was Sie tun können, und selbst dann erhalten Sie in modernen Browsern nicht den vollständigen ursprünglichen Pfad.

Möglicherweise können Sie mit Java oder Flash etwas zusammenstellen (z. B. mit SWFUpload als Grundlage), aber es ist viel Arbeit und bringt zusätzliche Kompatibilitätsprobleme mit sich.

Ein anderer Gedanke wäre, eine iframeAnzeige des Benutzers zu öffnenC: Laufwerks (oder was auch immer) aber selbst wenn dies heutzutage möglich ist (aus Sicherheitsgründen blockiert werden könnte, seit langem nicht mehr versucht wurde), ist es für Ihre Website unmöglich, mit dem Iframe zu kommunizieren (wieder aus Sicherheitsgründen).

Wofür brauchst du das?


1
Ich brauche es, um einen Pfad innerhalb des Computers auszuwählen, nicht zum Hochladen. Ich benutze diesen Pfad, um Dateien zu speichern, aber mit JSP-Funktion.
Enfix

2
@enfix Wie werden Sie eine Datei von einem JSP-Server in einem bestimmten Pfad auf dem lokalen Computer des Benutzers speichern? Ich verstehe nicht. Können Sie Ihre Frage zur Klärung bearbeiten?
Pekka

1
Ich muss den Pfad ermitteln, in dem der Benutzer Dateien speichern möchte, aber die Dateien werden mit dem Java-Funktionsaufruf auf der JSP-Seite gespeichert. Diese Funktion benötigt einen Pfad zum Speichern von Dateien. Das ist alles. Ich speichere mehr als eine Datei, ich muss Ordner und andere Dinge mit dieser Java-Funktion erstellen.
Enfix

9
@enfix Sie können keine Datei auf dem Computer des Clients vom Server speichern. Es ist völlig unmöglich. Sie müssten die Datei als regulären Dateidownload bereitstellen, und der Browser bietet dem Benutzer dann an, das Verzeichnis auszuwählen, in dem die Datei gespeichert werden soll. Dies liegt jedoch völlig außerhalb Ihrer Kontrolle. Sie können diesen Teil des Prozesses nicht beeinflussen.
Pekka

2
@ Pekka 웃 was macht es aus, wofür er es braucht
user3808307

74

Versuchen Sie dies, ich denke, es wird für Sie funktionieren:

<input type="file" webkitdirectory directory multiple/>

Die Demo finden Sie unter https://plus.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3 . Wenn Sie weitere Informationen benötigen, finden Sie diese hier .


6
Ich habe den Eindruck, dass Ihr Vorschlag zum Hochladen des Ordners funktioniert und nicht dessen Pfad erhält.
Lazarus Rising

Entwickler.mozilla.org/en-US/docs/Web/API/HTMLInputElement/… zur Dokumentation. Es heißt non-standard. Außerdem werden die enthaltenen Dateien rekursiv (?) Hochgeladen, wobei auch der Ordnername angezeigt wird. Dies wird für die meisten Fälle tun
phil294

@SamithaChathuranga funktioniert jetzt in Chrome, zumindest ab Version 65
xlm

3

Wenn Sie der Server und der Benutzer sind (z. B. wenn Sie eine App erstellen, die über den Browser funktioniert und Sie einen Ordner auswählen müssen), versuchen Sie, JFileChooservom Server aus anzurufen, wenn im Browser auf eine Schaltfläche geklickt wird

JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle("select folder");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed(false);

Dieser Code ist von hier abgeschnitten


2

Skripte sind unvermeidlich.

Dies wird aufgrund des Sicherheitsrisikos nicht bereitgestellt. <input type='file' />ist am nächsten, aber nicht das, was Sie suchen.

Testen Sie dieses Beispiel , das Javascript verwendet, um das zu erreichen, was Sie möchten.

Wenn das Betriebssystem Windows ist, können Sie mithilfe von VB-Skripten auf die zentralen Steuerdateien zugreifen, um nach einem Ordner zu suchen.


1

Ich habe eine Arbeit gemacht. Ich hatte ein verstecktes Textfeld, um den Wert zu halten. Dann habe ich auf form_onsubmit den Pfadwert abzüglich des Dateinamens in den versteckten Ordner kopiert. Setzen Sie dann das Feld fileInput auf "". Auf diese Weise wird keine Datei hochgeladen. Ich erinnere mich nicht an das Ereignis des fileUpload-Steuerelements. Vielleicht wechseln. Es ist eine Weile her. Wenn es einen Wert gibt, analysiere ich den Dateinamen und lege den Ordner wieder in die Box. Natürlich würden Sie überprüfen, ob die Datei eine gültige Datei ist. Dies würde Ihnen den Arbeitsstationsordner des Clients geben.
Wenn Sie jedoch Serverpfade widerspiegeln möchten, ist ein ganz anderer Codierungsansatz erforderlich.


Der Benutzer müsste geschult sein, um eine Datei auszuwählen. Es ist verrückt. Funktioniert aber zur Not. Fügen Sie dem FileUpload-Steuerelement and onchange = "parseFilePath ()" hinzu. Funktion parseFileUploadPath () {var upl = document.getElementById ("<% = this.FileUpload1.ClientID%>"); if (upl.value! = "") {var pos = upl.value.lastIndexOf ("\\") document.getElementById ("<% = this.TextBox1.ClientID%>"). value = upl.value.substr (0, pos)}}
user8004777

Entschuldigung, vollständigeres HTML.
user8004777

0

Wenn Sie nicht zu viele Ordner haben, empfehlen wir Ihnen, if-Anweisungen zu verwenden, um einen Upload-Ordner abhängig von den Benutzereingabedetails auszuwählen. Z.B

String user= request.getParameter("username");
if (user=="Alfred"){
//Path A;
}
if (user=="other"){
//Path B;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.