Marc Miller: Input type=file

Hallo

Ich würde eigentlich ganz gerne den input tap type=file verwenden, um den Pfad auf einen Folder einem Script zu übermitteln. Leider aber muss man damit ein File auswählen, sonst lässt sich das Dialogfenster nicht schliessen. Gibt es da eine andere Möglichkeit, habe leider nichts gefunden, wie man das Feld dahingehend "kofigurieren" könnte.
Danke für die Mithilfe!

Gruss, Marc

  1. Moin!

    Ich würde eigentlich ganz gerne den input tap type=file verwenden, um den Pfad auf einen Folder einem Script zu übermitteln. Leider aber muss man damit ein File auswählen, sonst lässt sich das Dialogfenster nicht schliessen. Gibt es da eine andere Möglichkeit, habe leider nichts gefunden, wie man das Feld dahingehend "kofigurieren" könnte.

    Das Eingabefeld heißt type="FILE", nicht type="FOLDER", und es ist wirklich nur dafür da, Dateien hochzuladen. Dass bei Nichtverwendung von enctype="multipart/form-data" nur der gewählte Dateiname übertragen wird, nicht jedoch die Datei selbst, ist in meinen Augen eher ein Fehler, als als Absicht anzusehen.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. Moin!

      Moin und danke lieber Gollum

      Ich dachte eigentlich eher an einen Gegenvorschlag als an eine Zurechtweisung. ich bin sicherlich nicht der erste, der es einem benutzer ermöglichen möchte, bequem über das filebrowser Fenster ein pfad auszuwählen!

      Gruss

      1. Hallo,

        ich bin sicherlich nicht der erste, der es einem benutzer ermöglichen möchte, bequem über das filebrowser Fenster ein pfad auszuwählen!

        Richtig http://suche.de.selfhtml.org/cgi-bin/such.pl?suchausdruck=input+file+verzeichnis+wählen&lang=on&feld=alle&index_5=on&index_6=on&index_7=on&index_8=on&hits=100. Das ändert aber auch nichts daran, dass es immer noch nicht geht. Warum auch? Was sollte HTTP mit einem Verzeichnis anfangen können?

        viele Grüße

        Axel

      2. Tag Marc.

        Ich dachte eigentlich eher an einen Gegenvorschlag als an eine Zurechtweisung. ich bin sicherlich nicht der erste, der es einem benutzer ermöglichen möchte, bequem über das filebrowser Fenster ein pfad auszuwählen!

        Auch dein Gegrummel ändert nichts an der Tatsache, dass das, was du möchtest, nicht mit HTML möglich ist. Das Einzige, was dir auf diesem Wege bleibt, ist ein Texteingabefeld, in welches der User den Pfad eingeben muss. Sollte dir das nicht reichen, schlage ich die Verwendung einer anderen Technik als HTML vor (Java oder Flash fielen mir da spontan ein).

        Siechfred

      3. Moin!

        Ich dachte eigentlich eher an einen Gegenvorschlag als an eine Zurechtweisung. ich bin sicherlich nicht der erste, der es einem benutzer ermöglichen möchte, bequem über das filebrowser Fenster ein pfad auszuwählen!

        Das Problem ist, dass das Auswählen eines userlokalen Pfades des Dateisystem im INTERNET niemandem etwas bringt.

        1. Das lokale Dateisystem ist vom Browser aus nahezu nicht zugänglich. HTML und CSS sind ja sowieso nicht interaktiv, aber Javascript hat selbst ja auch keinerlei Mechanismus, um auf Dateien und Verzeichnisse zuzugreifen (von der Irrsinnigkeit in JScript im IE mal abgesehen). Einzige Methode ist der bekannte Dateiauswahlbutton "type=file".

        2. Auch der Server kann nur mit dem Namen einer ausgewählten Datei oder eines Verzeichnisses allein in der Regel nichts anfangen, da er ja ebenfalls _in der Regel_ nicht auf das Dateisystem des Users zugreifen kann.

        Das alles gilt natürlich nicht in Ausnahmefällen. _Wenn_ der Server das gleiche Dateisystem (oder einen Ausschnitt) sehen kann, wie der User, dann aber kann der Server auch serverseitig drauf zugreifen, und dem User mit den bekannten Mitteln des Formularwesens eine passende Auswahlmöglichkeit bieten.

        Was der Server allerdings dateisystemmäßig NICHT sehen kann, dass kann der User auch nicht auswählen - es sei denn, es handelt sich eben um eine Datei, die der User mit <input type="file"> auswählt und direkt an den Server sendet - dabei geht die Information des Dateipfades allerdings aus verständlichen Gründen verloren.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Danke Euch allen

          Ich hab leider beim rumgrübeln an meinem Problem etwas die Weitsichtigkeit verloren. Ist komplett richtig dass im Regelfall sowas nicht gebraucht wird. In meinem Fall handelt es sich um ein  PHP-Skript. Dem Webserver ist es erlaubt, auf die lokalen Laufwerke zuzugreifen. Werde ein Textfeld vorsehen...

          Thanks, marc

          1. Lieber Marc,

            wenn Du Javascript einsetzt, und vor dem Abschicken des Formulars das entsprechende input-Feld ausliest und dessen Wert in ein type=hidden input-Feld setzt, dann kommst Du vielleicht doch noch zu Deinem beabsichtigten Effekt...

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            1. Hallo,

              wenn Du Javascript einsetzt, und vor dem Abschicken des Formulars das entsprechende input-Feld ausliest und dessen Wert in ein type=hidden input-Feld setzt, dann kommst Du vielleicht doch noch zu Deinem beabsichtigten Effekt...

              Das ändert aber auch nichts daran, dass der Nutzer für das INPUT type="file" eine Datei auswählen muss. Man kann dort kein Verzeichnis auswählen. Man müsste dem Nutzer also sagen: Wähle das Verzeichnis aus, indem Du irgendeine Datei in diesem Verzeichnis auswählst, sollte es dort noch keine geben, musst Du vorher eine erstellen. Nicht wirklich praktikabel, oder?

              Der Browser als HTML/JavaScript-Viewer und HTTP-Client ist für so etwas als Client also nicht geeignet. Man muss hier Erweiterungen im Browser nutzen. Java (Applet) wurde schon genannt, wobei es hier ein signiertes Applet sein müsste, damit auf das lokale Filesystem zugegriffen werden kann. Gegebenenfalls kommt in abgeschotteten Intranets mit IE als Browser auch ActiveX in Betracht.

              viele Grüße

              Axel

          2. Moin!

            Ich hab leider beim rumgrübeln an meinem Problem etwas die Weitsichtigkeit verloren. Ist komplett richtig dass im Regelfall sowas nicht gebraucht wird. In meinem Fall handelt es sich um ein  PHP-Skript. Dem Webserver ist es erlaubt, auf die lokalen Laufwerke zuzugreifen.

            Dann soll der Webserver einfach auf die lokalen Verzeichnise zugreifen, diese auslesen und eine SELECT-Liste oder sonst eine Auswahlstruktur (SELECT ist bei potentiell mehr als 100 Optionen keine vernünftige Idee mehr) dynamisch generieren. Dann kann der Benutzer für den Server mundgerecht den Pfad auswählen.

            Was die Auswahlstruktur angeht: Das dürfte in der Tat das komplizierteste werden, denn der typische Browsing-Vorgang läßt sich per Formular so direkt gar nicht nachstellen, dazu benötigt man entweder heftig Javascript und den zu browsenden Gesamtbestand irgendwie verfügbar gemacht, oder zwischenzeitliche Serverinteraktion, wenn der Benutzer eine Zwischenauswahl getroffen hat.

            - Sven Rautenberg

            --
            My sssignature, my preciousssss!
            1. Hallo,

              In meinem Fall handelt es sich um ein  PHP-Skript. Dem Webserver ist es erlaubt, auf die lokalen Laufwerke zuzugreifen.

              Dann soll der Webserver einfach auf die lokalen Verzeichnise zugreifen, diese auslesen und eine SELECT-Liste oder sonst eine Auswahlstruktur (SELECT ist bei potentiell mehr als 100 Optionen keine vernünftige Idee mehr) dynamisch generieren. Dann kann der Benutzer für den Server mundgerecht den Pfad auswählen.

              Hast Du mal zu Ende gedacht, was das für den Netzwerktraffic bedeuten würde? Nehmen wir nur 10 Client-PCs an. Davon rufen nur mal 5 gleichzeitig diese Seite auf. Der Server lässt nun sein Script in fünf Instanzen rekursiv über fünf Netzwerk-Filesysteme(von ihm aus gesehen) rattern, um diese auszulesen.

              Deshalb löst man so etwas eigentlich so, dass jeder Nutzer auf dem Server einen Dateisystembereich hat, in dem er auch Schreibzugriffe initiieren darf. Der Server muss dann, auf Nutzeranforderung, nur _diesen_ Bereich seines eigenen Filesystems durchrattern, um die Verzeichnisliste zu generieren. Das setzt natürlich eine vorherige Anmeldung der Nutzer voraus.

              viele Grüße

              Axel

              1. Moin!

                Dann soll der Webserver einfach auf die lokalen Verzeichnise zugreifen, diese auslesen und eine SELECT-Liste oder sonst eine Auswahlstruktur (SELECT ist bei potentiell mehr als 100 Optionen keine vernünftige Idee mehr) dynamisch generieren. Dann kann der Benutzer für den Server mundgerecht den Pfad auswählen.

                Hast Du mal zu Ende gedacht, was das für den Netzwerktraffic bedeuten würde? Nehmen wir nur 10 Client-PCs an. Davon rufen nur mal 5 gleichzeitig diese Seite auf. Der Server lässt nun sein Script in fünf Instanzen rekursiv über fünf Netzwerk-Filesysteme(von ihm aus gesehen) rattern, um diese auszulesen.

                Da muß man gar keine Netzwerkszenarien bemühen. Mutmaßlich schaut es hier (Low-Level-Szenario angenommen) so aus, als würden sich Client und Browser auf der gleichen Maschine befinden.

                Alleine das _vollständige_ Durchgehen und generieren aller existierenden Verzeichnisse wäre eine sehr aufwendige Aufgabe. Allein mein Laufwerk C, auf dem sich außer Windows eigentlich nichts befinden sollte (Userdaten und Anwendungen sind für gewöhnlich auf anderen Laufwerken abgelegt), enthält fast 34.000 Dateien in fast 2000 Ordnern.

                Eine Liste mit 2000 Auswahlmöglichkeiten ist aber sowohl für den Benutzer vollkommen unmöglich sinnvoll handhabbar, sie ist darüber hinaus auch vollkommen unmöglich mit "einfachen Mitteln" generierbar - sowas kosten enorm viel Zeit, mindestens beim ersten Mal, Caching hat aber das dumme Problem, dass man es auch nicht übermäßig lange gültig lassen darf.

                Selbst die Idee, nur die Verzeichnisse des serverlokalen Dateisystems rekursiv komplett auszugeben ist daher eigentlich eine Wahnsinnsidee.

                Ich habe mal in PHP einen Texteditor mit Dateibrowser geschrieben. Der Benutzer kann dort nicht nur im aktuellen Verzeichnis browsen, sondern sich die Liste auch rekursiv anzeigen lassen. Das ist ganz hilfreich, wenn man z.B. sein Userverzeichnis mit einer Ebene Unterverzeichnissen betrachten will - man kommt schnell und ohne zusätzlichen Klick direkt an alle Dateien heran.

                Ungezügelte Rekursivität ausgehend vom Rootverzeichnis hingegen hat erstens Ewigkeiten auf dem Server benötigt, und produzierte zweitens Megabytes an Seitendaten, bei denen der Browser schon Schwierigkeiten mit der Darstellung hatte.

                Insofern: Browsing im Dateiverzeichnis ist eindeutig eine Förderung der Zugänglichkeit zu dieser Datenbank, und ein Neuproduzieren von <input type="file"> muß daher mehr oder weniger zwingend das Verhalten und das Informationsangebot des vom Betriebssystem bekannten Dateiauswahldialogs imitieren.

                Deshalb löst man so etwas eigentlich so, dass jeder Nutzer auf dem Server einen Dateisystembereich hat, in dem er auch Schreibzugriffe initiieren darf. Der Server muss dann, auf Nutzeranforderung, nur _diesen_ Bereich seines eigenen Filesystems durchrattern, um die Verzeichnisliste zu generieren. Das setzt natürlich eine vorherige Anmeldung der Nutzer voraus.

                Ich widerspreche. Das Problem ist primär NICHT, dass so viele verschiedene Laufwerke auf unterschiedlichen Rechnern ausgelesen werden, und dass dadurch bei jedem Abruf der Auswahlfunktion das Netzwerk geflutet wird, sondern dass auch beim Konzept "Userverzeichnis auf dem Server" niemals garantiert werden kann, dass nicht auch dort eine komplexe, ausufernde Verzeichnisstruktur angelegt wird.

                Ich kann in diesem Zusammenhang als Beispiel nur den sehr sehr traurigen Dateiauswahldialog von diversen Content-Management-Systemen anführen. Insbesondere ein CMS macht es dem Benutzer besonders schwer (den Namen nenne ich jetzt mal nicht): Die Dateien landen allesamt in genau EINEM Verzeichnis (man kann unterschiedliche Verzeichnisse haben, aber im CMS muß man das zu verwendende Verzeichnis fix mit dem Datenfeld, dass der Benutzer befüllt, verbinden), und der Dialog bietet dann eine Liste (alternativ als "Asset-Management" auch eine Thumbnailansicht, wenn man das als Admin für das Verzeichnis festgelegt hat) der enthaltenen Dateien, und zum Durcharbeiten dann "weiter" zur "zurück". Immerhin kann man mit einer Suchfunktion, die auch Wildcards erlaubt, nach den Dateinamen suchen - aber im Laufe der Zeit sammeln sich einfach so viele Dateien an, dass man, um überhaupt auf altes Material zugreifen zu können, eigentlich nur noch per Suchfunktion (also mit Kenntnis des Dateinamens) etwas finden kann - fünf oder mehr Seiten mit je etwa 20 bis 30 Dateien sind alles andere als zugänglich.

                Das Löschen ist noch schrecklicher gelöst: Je Datei gibt es ein Icon - und nach Abschluß des Löschens landet man wieder auf Seite 1, müßte also erneut über Seite 2, Seite 3 und Seite 4 auf Seite 5 weiterklicken...

                - Sven Rautenberg

                --
                My sssignature, my preciousssss!
                1. Hallo,

                  Eine Liste mit 2000 Auswahlmöglichkeiten ist aber sowohl für den Benutzer vollkommen unmöglich sinnvoll handhabbar,

                  Das wäre lösbar, indem man so etwas ähnliches wie den Dateisystem-Dialog der OS nachbaut, wie Du ja auch vorgeschlagen hast. Es wird immer nur der Inhalt eines Verzeichnisses mit Dateien und Unterverzeichnissen in einer Liste gezeigt. Erst, wenn man ein Unterverzeichnis anfordert (Klick), wird dieses durchsucht und in einer neuen Liste gezeigt ...

                  Deshalb löst man so etwas eigentlich so, dass jeder Nutzer auf dem Server einen Dateisystembereich hat, in dem er auch Schreibzugriffe initiieren darf. Der Server muss dann, auf Nutzeranforderung, nur _diesen_ Bereich seines eigenen Filesystems durchrattern, um die Verzeichnisliste zu generieren. Das setzt natürlich eine vorherige Anmeldung der Nutzer voraus.

                  Ich widerspreche. Das Problem ist primär NICHT, dass so viele verschiedene Laufwerke auf unterschiedlichen Rechnern ausgelesen werden, und dass dadurch bei jedem Abruf der Auswahlfunktion das Netzwerk geflutet wird, sondern dass auch beim Konzept "Userverzeichnis auf dem Server" niemals garantiert werden kann, dass nicht auch dort eine komplexe, ausufernde Verzeichnisstruktur angelegt wird.

                  Ja, das macht dann aber der Nutzer selbst so. Das Problem der endlos langen Liste kann man lösen (siehe oben). Das Problem der Laufzeit der Scripte bei der Generierung der Listen wäre auch etwas abgemildert, wenn man immer nur das Verzeichnis, welches der Nutzer gerade anfordert, durchsuchen und ausgeben muss.

                  viele Grüße

                  Axel