dac: Wie Dateien/Verzeichnis Liste von Client an Server schicken?

Hey Leute,
ich denke grade über eine Lösung für folgendes Problem nach:

Ich möchte eine Intranet Webseite programmieren, welche es dem Client ermöglicht, eine Liste von lokalen Daten und Verzeichnissen auf den Server hochzuladen.

Der Client kommt also angesurft, soll eine Art Formular-Feld angezeigt bekommen, welches ihm ermöglicht, lokale Dateien und Verzeichnisse auszuwählen. Am besten wäre eine direkte Mehrfachauswahl, soweit ich weiß, kann das normale <input type=file..> nur einzelne Dateien auswählen. Die einmal ausgewählten Dateien sollen dann nochmal in einem div angezeigt werden, bevor sie an den Server geschickt werden.

Geschickt werden soll aber nur eine Liste der ausgewählten Dateien, nicht die Dateien selbst. Ich bin also nur am lokalen absoluten Pfad zu den vom User ausgewählten Dateien interessiert.

Wichtig wäre halt eine komfortable Dateiauswahl. Ich denke, mit dem <input type=file...> kann man nur einzelne Dateien auswählen, richtig?

Wie schaut es mit Alternativen aus? JavaScript wird ja wohl kaum Zugriff auf Dateien und Verzeichnisse haben... Wie stehts mit Flash? Kann das auf die Festplatte zugreifen?

Sowas wie Total Commander wäre schickt, das wäre das i-Tüpfelchen der Usability in meinem Fall, aber wahrscheinlich aus Sicherheitsgründen nicht umsetzbar, oder?

  1. Moin Moin!

    Der Client kommt also angesurft, soll eine Art Formular-Feld angezeigt bekommen, welches ihm ermöglicht, lokale Dateien und Verzeichnisse auszuwählen. Am besten wäre eine direkte Mehrfachauswahl, soweit ich weiß, kann das normale <input type=file..> nur einzelne Dateien auswählen.

    Das reicht doch. Für Leute, die Deiner Website Javascript erlauben, kannst Du dann zusätzlich noch dynamisch weitere <input type="file" ...> generieren.

    Die einmal ausgewählten Dateien sollen dann nochmal in einem div angezeigt werden, bevor sie an den Server geschickt werden.

    Namen oder Inhalte?

    Geschickt werden soll aber nur eine Liste der ausgewählten Dateien, nicht die Dateien selbst. Ich bin also nur am lokalen absoluten Pfad zu den vom User ausgewählten Dateien interessiert.

    Der geht Dich nichts an. Der IE (wenigstens bis 6) ist an dieser Stelle leider kaputt und schickt diese Information trotzdem raus.

    Warum glaubst Du, diese Information zu benötigen?

    Wichtig wäre halt eine komfortable Dateiauswahl. Ich denke, mit dem <input type=file...> kann man nur einzelne Dateien auswählen, richtig?

    Richtig.

    Wie schaut es mit Alternativen aus? JavaScript wird ja wohl kaum Zugriff auf Dateien und Verzeichnisse haben...

    Nicht ohne fremde Hilfe.

    Wie stehts mit Flash? Kann das auf die Festplatte zugreifen?

    Frag Adobe. Ich vermute, da gibt es einen Weg.

    Signierte Java-Applets können definitiv aus der Sandbox des Browsers heraus.

    Sowas wie Total Commander wäre schickt, das wäre das i-Tüpfelchen der Usability in meinem Fall, aber wahrscheinlich aus Sicherheitsgründen nicht umsetzbar, oder?

    Mit viel Javascript und einem Vermittler (Flash / signiertes Java-Applet) im Hintergrund schon. Aber wozu?

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Hallo,

      Geschickt werden soll aber nur eine Liste der ausgewählten Dateien, nicht die Dateien selbst. Ich bin also nur am lokalen absoluten Pfad zu den vom User ausgewählten Dateien interessiert.
      Der geht Dich nichts an.

      in einem Intranet-Projekt, über dessen Zweck wir nichts genaueres wissen, möglicherweise schon.

      Warum glaubst Du, diese Information zu benötigen?

      Wenn es um ein öffentliches Web-Projekt ginge, hätte ich die Frage auch gestellt. Hier aber nicht.

      Allerdings wäre in dieser kontrollierbaren Umgebung auch ein Browser-AddOn denkbar, oder sogar ein speziell für diesen Zweck geschriebener Client.

      So long,
       Martin

      --
      Zwei Kumpels sitzen vor dem Computer. "Welche Suchmaschine beutzt du eigentlich meistens?" - "Prima Vera." - "Hmm, kenn' ich gar nicht." Dann geht die Tür auf: "Schatz ich habe deine Sonnenbrille wiedergefunden!" - "Prima, Vera!"
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Hi,

    schau mal hier: http://php.net/manual/de/features.file-upload.multiple.php
    Aus einem Dateirequester eine Multiauswahl zu bekommen sollte funktionieren. Das Resultat setzt Du in der Zwischenseite (die Du ja eh bauen willst zur Kontrolle und zum abwählen) mittels der Info oben in mehrere Inputfelder um und schickst es los.

    Viele Grüße,
    Rob

  3. Hallo,

    schau dir mal Uploadify an, falls du doch noch irgendwann die ausgewählten Dateien auch wirklich hochladen willst.

    Ich habe das letztens eingebaut und finde es super.

    Aber ob du damit auch (nur) die lokalen Pfade anzeigen kannst weiß ich nicht. Wie gesagt, hat dich das ja auch nicht im geringsten zu interessieren. (außer vielleicht, wenn du in einem Intranet arbeitest - das hättest du uns laut Charta des Forus aber sagen müssen.)

    Die lokalen Dateinamen siehst du jedenfalls.

    Gruß
    Alex

    1. Hi,

      (außer vielleicht, wenn du in einem Intranet arbeitest - das hättest du uns laut Charta des Forus aber sagen müssen.)

      Hat er doch. Gleich am Anfang ...

      Ciao,
       Martin

      --
      Ein Theoretiker ist ein Mensch, der praktisch nur denkt.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Hat er doch. Gleich am Anfang ...

        Sorry - das habe ich wohl überlesen. Internet und Intranet ist auch wirklich zum verwechseln ;)

        Dann stellt sich trotzdem die Frage, wozu er diese Informationen braucht - das kann sich ja jederzeit ändern.

        1. Moin Moin!

          Hat er doch. Gleich am Anfang ...

          Sorry - das habe ich wohl überlesen. Internet und Intranet ist auch wirklich zum verwechseln ;)

          ich auch ...
          schade eigentlich

          Dann stellt sich trotzdem die Frage, wozu er diese Informationen braucht - das kann sich ja jederzeit ändern.

          Das stinkt nach üblen Frickeleien mit Fileservern. Der übliche Murksansatz wäre, auf irgendeinen Fileserver ein paar HTML-Dateien zu schmeißen, dann mit Tonnen von Javascript irgendwas basteln, um dann im nächsten Schritt daran zu scheitern, dass Javascript weder Dateien schreiben noch externe Programme aufrufen kann. Eine Iteration weiter mauert man sich dann mit einer *.hta endgültig in der M$-Ecke ein und stapelt sich ein riesiges Kartenhaus zusammen, das beim ersten Huster in sich zusammenfällt.

          Meistens fehlt schlicht ein vernünftiges Dokumentenmanagement-System und ein Admin, der sich traut, normalsterblichen Benutzern den Zugriff auf die verbliebenen Fileserver zu verweigern.

          Die Variante, einen Norton Commander Clone in einem Browser zu clonen, kannte ich aber auch noch nicht. ;-)

          Alexander

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  4. Hallo,

    Ich möchte eine Intranet Webseite programmieren, welche es dem Client ermöglicht, eine Liste von lokalen Daten und Verzeichnissen auf den Server hochzuladen.

    kannst Du einen bestimmten Browser voraussetzen? Im IE sollte dies nicht sonderlich schwierig sein: ein paar Zeilen VB- oder JScript. Für Firefox wäre ein AddOn bestimmt auch nicht schwer zu schreiben, falls nicht ohnehin eines mit dieser Funktionalität vorhanden ist.

    Falls nicht, aber Flash vorhanden ist, dürfte eine flashbasierte Lösung am einfachsten sein. Weitere Alternativen: Java-Applet, Silverlight, ...

    Freundliche Grüße

    Vinzenz

  5. Danke erstmal für eure zügigen Antworten.

    Ja, die Web-Anwendung soll nur im Intranet eingesetzt werden. Der Benutzer ist in dem Falle daran interessiert, mir möglichst viel über seine lokalen Dateien mitzuteilen, von daher erschnüffel ich mir da keine Informationen. Er wählt bewusst Dateien aus, um mir mitzuteilen, welche dies sind und wo sie sich bei ihm befinden.

    Eigentlich wäre der absolute Pfad nicht unbedingt von Nöten, aber zumindest der Ordnername, in dem sich die ausgewählten Dateien befinden. Wenn der Benutzer einen ganzen Ordner markiert, dann natürlich dessen Name.

    Die ausgewählten Dateien sollen nicht hochgeladen werden, wir brauchen nur die Liste.

    Mir geht es im Wesentlichen um ein besonders einfach und schnell zu bedienendes UI. Daher wäre sowas wie Total Commander super: auf der linken Seite die lokalen Verzeichnisse, der Benutzer wählt Dateien oder Ordner, die in ein Div auf der rechten Seite gezogen werden können und dort einfach nur als Liste erscheinen. Unten dann einen Submit-button, der am Ende der Auswahl die Liste losschickt.

    Toll wäre es, wenn ich auf Java Applets oder Browser Plugins verzichten könnte, das dies zu umständlich einzurichten ist auf Clientseite.

    Gibt es eine Möglichkeit zur Kombination von Flash und JavaScript? Kann man da was machen? Wie würde ein Ansatz aussehen?

    Und was ist mit HTML5? Da gibt es doch jetzt multiple file upload, oder? Mit <input type=multifile../> glaub ich... Kann man da auch nur den ausgewählten Dateinamen auslesen??
    Diese Möglichkeit wäre umständlich, weil der User für jede Auswahl neu auf den "Browse.."-Button klicken müsste. Und in unserem Fall werden viele viele Dateien ausgewählt..

    Daher dachte ich an so einen Total Commander Klon... Also von der UI her..

    1. Moin Moin!

      Ja, die Web-Anwendung soll nur im Intranet eingesetzt werden. Der Benutzer ist in dem Falle daran interessiert, mir möglichst viel über seine lokalen Dateien mitzuteilen, von daher erschnüffel ich mir da keine Informationen. Er wählt bewusst Dateien aus, um mir mitzuteilen, welche dies sind und wo sie sich bei ihm befinden.

      Und wozu? Was soll mit den Dateien passieren?

      Eigentlich wäre der absolute Pfad nicht unbedingt von Nöten, aber zumindest der Ordnername, in dem sich die ausgewählten Dateien befinden. Wenn der Benutzer einen ganzen Ordner markiert, dann natürlich dessen Name.

      Die ausgewählten Dateien sollen nicht hochgeladen werden, wir brauchen nur die Liste.

      Wofür?

      Mir geht es im Wesentlichen um ein besonders einfach und schnell zu bedienendes UI. Daher wäre sowas wie Total Commander super: auf der linken Seite die lokalen Verzeichnisse, der Benutzer wählt Dateien oder Ordner, die in ein Div auf der rechten Seite gezogen werden können und dort einfach nur als Liste erscheinen. Unten dann einen Submit-button, der am Ende der Auswahl die Liste losschickt.

      Toll wäre es, wenn ich auf Java Applets oder Browser Plugins verzichten könnte, das dies zu umständlich einzurichten ist auf Clientseite.

      Nö, nicht wirklich. Java-Runtime ist meistens vorhanden, das Applet verteilst Du einfach vom Webserver. Plugin kannst Du testen, falls nicht vorhanden, kannst Du es ebenfalls vom Webserver mehr oder weniger automatisch nachinstallieren. Exakt so geht VMware z.B. beim VMWare Server 2 vor.

      Gibt es eine Möglichkeit zur Kombination von Flash und JavaScript?

      Natürlich, z.B. http://aktuell.de.selfhtml.org/artikel/programmiertechnik/liveconnect/

      Kann man da was machen? Wie würde ein Ansatz aussehen?

      Flash-Doku runterladen und herausfinden, wie man aufs lokale Dateisystem zugreifen kann.

      Und was ist mit HTML5? Da gibt es doch jetzt multiple file upload, oder? Mit <input type=multifile../> glaub ich... Kann man da auch nur den ausgewählten Dateinamen auslesen??

      HTML5 ist noch nicht fertig. Was implementiert ist, und wie, und wie weit, hängt vom jeweiligen Browser ab.

      Diese Möglichkeit wäre umständlich, weil der User für jede Auswahl neu auf den "Browse.."-Button klicken müsste. Und in unserem Fall werden viele viele Dateien ausgewählt..

      Daher dachte ich an so einen Total Commander Klon... Also von der UI her..

      Im Browser. Klar. Geht's noch umständlicher?

      Bei den PowerToys zu Windows 95(!) gab es ein nettes kleines Tool namens "Send to Clipboard as Name", letztlich eine DLL, die sich tief im System verankert hat und im Windows-Explorer das Kontext-Menü unter "Senden an" / "Sent to" um einen Eintrag "Clipboard as Name" erweitert hat. Man markiert eine oder mehrere Dateien, öffnet per Rechtsklick das Kontextmenü, navigiert über "Senden an" nach "Clipboard as Name", klickt das wieder an, und schon sind die vollständigen(!) Namen aller Dateien im Clipboard, von wo aus man sie irgendwo einfügen kann. Das funktioniert auch mit späteren Versionen von Windows noch, lästigerweise installiert das Toy auch noch jede Menge anderen Kram, der teilweise stört.

      Es geht auch noch etwas einfacher: Ein Programm, dass direkt oder als Verknüpfung im Ordner SentTo des Benutzers ("C:\Documents and Settings\JoeAverage\SendTo") liegt, erscheitn automatisch im "Senden an"-Menü, wird das Programm von dort aus aufgerufen, bekommt es das/die ausgewählten Programme als Kommandozeilenparameter übergeben.

      "Send To Clipboard as Name" ist bei mir mittlerweile ein C-Programm mit knapp 100 Zeilen, das im wesentlichen die Win32-API-Funktionen GlobalAlloc, GlobalLock, GlobalUnlock, OpenClipboard, EmptyClipboard, SetClipboardData, und CloseClipboard aufruft (in dieser Reihenfolge).

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  6. Hallo,

    in Flash gibt es die Möglichkeit, mehrere Dateien auf einmal auszuwählen und zu übertragen (Stichwort FileReference/FileReferenceList). Der lokale Pfad lässt sich allerdings auch hier nicht ausgeben.

    Grüße Basti

  7. hi,

    Wie schaut es mit Alternativen aus? JavaScript wird ja wohl kaum Zugriff auf Dateien und Verzeichnisse haben

    Das nicht, aber Du kannst mit JS soviele Input type="file" Felder erzeugen, wie der Benutzer will, evntl. auch autoamtisch: User füllt das erste Feld, fertig, damit wird ein nächstes Feld erzeugt usw.

    Aber dann kommt die Crux: Der Browser schickt die Dateien wirklich zum Server, sofern das Form-attr enctype="multipart/form-data" gesetzt ist. Und was da an Pfad mitgegeben wird, ist browserabhängig, ältere IEs geben den kompletten lokalen Pfad mit (d:/home/huhu.exe), i.d.R. gibt der Browser jedoch nur den Dateinamen ohne Pfadangabe mit.

    Wenn Du also nur den/die Dateinamen haben willst, und mehr darfst Du nicht erwarten, probier ein Formular ohne enctype s.o. (Default enctype="application/x-www-form-urlencoded"). Dann hängts auch von der serverseitigen Sprache ab, was Du bekommen kannst.

    Hotti