Marc Reichelt: Übertragung von großen Dateien, Client => Server

Hallo an alle,

für ein zukünftiges Projekt brauche ich eine Übertragungsmethode für große Dateien (die Rede ist hier von schätzungsweise 20 MB pro Datei, größere Dateien sind sehr wahrscheinlich).

Die normale POST-Methode ist von ihrer Benutzung her zwar sehr einfach, aber bei solch großen Dateien nicht mehr sinnvoll.
Daher meine Frage:
Welche Übertragungsmethode wäre am sinnvollsten?
Eine Überlegung von mir war FTP, das eigentlich am Besten dafür geeignet sein sollte - allerdings brauche ich dazu einen FTP-Server, und bis jetzt wäre es mir sehr recht, wenn ich nur einen HTTP-Server dafür benutzen könnte.

Die Dateien sollen einfach über ein Web-Interface übertragbar sein, notfalls wird die POST-Methode als letzte Möglichkeit eingerichtet.
Ich dachte bisher an ein Java-Applet, das mit einem Socket die Daten an den Server überträgt.

Grüße

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
http://emmanuel.dammerer.at/selfcode.html
  1. Hi,

    also das mit dem Java-Applet ist aus meiner Sicht eine recht clevere Sache, weil es einfach mehr Möglichkeiten bietet als die normalen Webformulare, von Drag&Drop der Dateien bis hin zu Fortschrittsanzeigen der aktuell gesendeten Bytes bzw. Kommunikation mit dem Server. Im Zweifel könntest du noch durch automatisches zippen etc. ergänzen.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hallo Rouven,

      also das mit dem Java-Applet ist aus meiner Sicht eine recht clevere Sache, weil es einfach mehr Möglichkeiten bietet als die normalen Webformulare, von Drag&Drop der Dateien bis hin zu Fortschrittsanzeigen der aktuell gesendeten Bytes bzw. Kommunikation mit dem Server. Im Zweifel könntest du noch durch automatisches zippen etc. ergänzen.

      Daran habe ich bereits gedacht (Bzip2 :-).
      Allerdings muss das Applet in der Tat auf die Festplatte zugreifen.
      Ich bin am Überlegen, ob ich nicht doch einen ganzen Client in Java schreibe. Dieser kann dann alles übernehmen, und ist zudem noch plattformunabhängig.

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      http://emmanuel.dammerer.at/selfcode.html
      1. Moin!

        Ich bin am Überlegen, ob ich nicht doch einen ganzen Client in Java schreibe. Dieser kann dann alles übernehmen, und ist zudem noch plattformunabhängig.

        Dann muß der Benutzer den Client installieren, und du mußt dir ein passendes Protokoll ausdenken, welches den Datentransfer bewerkstelligt - inklusive Serverteil.

        Da könnte man auf den Gedanken kommen, dass es genausoviel Aufwand für den Benutzer ist, sich einen FTP-Client zu installieren, und für dich ist es erheblich weniger Aufwand, nur den FTP-Server zu installieren, und die gesamte Programmierarbeit für den Java-Client plus Serverunterstützung wegzulassen.

        - Sven Rautenberg

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

          Ich bin am Überlegen, ob ich nicht doch einen ganzen Client in Java schreibe. Dieser kann dann alles übernehmen, und ist zudem noch plattformunabhängig.

          Dann muß der Benutzer den Client installieren, und du mußt dir ein passendes Protokoll ausdenken, welches den Datentransfer bewerkstelligt - inklusive Serverteil.

          Ich habe mich soeben für FTP entschieden. Ich muss halt nur einen entsprechenden FTP-Server aufsetzen, den Rest macht der Client.

          Da könnte man auf den Gedanken kommen, dass es genausoviel Aufwand für den Benutzer ist, sich einen FTP-Client zu installieren, und für dich ist es erheblich weniger Aufwand, nur den FTP-Server zu installieren, und die gesamte Programmierarbeit für den Java-Client plus Serverunterstützung wegzulassen.

          Java an sich ist ja eine tolle Sache, aber wenn der Client keine JRE installiert hat, bringt es herzlich wenig.
          Eine mit Qt geschriebene Anwendung wäre natürlich sehr schön, allerdings scheint die entsprechende Klasse von Qt für FTP (namens QFtp) keine Append-Funktion zu haben, die für dieses Vorhaben notwendig wäre.

          Ich denke, ich werde Java für den Client verwenden, und FTP als Übertragungsmethode. Einen gewöhnlichen FTP-Client möchte ich den Nutzern dieser Sache nicht zumuten, vor allem deshalb, weil die Daten vor der Übertragung noch mit Bzip2 komprimiert werden sollen. Und das erkläre mal einigen Künstlern, wie das alles geht... ;-)

          Grüße

          Marc Reichelt || http://www.marcreichelt.de/

          --
          Linux is like a wigwam - no windows, no gates and an Apache inside!
          Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
          http://emmanuel.dammerer.at/selfcode.html
          1. Hallo Marc

            Ich denke, ich werde Java für den Client verwenden, und FTP als Übertragungsmethode. Einen gewöhnlichen FTP-Client möchte ich den Nutzern dieser Sache nicht zumuten, vor allem deshalb, weil die Daten vor der Übertragung noch mit Bzip2 komprimiert werden sollen. Und das erkläre mal einigen Künstlern, wie das alles geht... ;-)

            Viele (alle ?) Betriebssysteme bringen doch einen Kommandozeilen-FTP-Client
            mit. Da wäre dann jeweils ein Script, welches diesen mit den richtigen
            Parametern startet, vielleicht das Einfachste.

            Auf Wiederlesen
            Detlef

            --
            - Wissen ist gut
            - Können ist besser
            - aber das Beste und Interessanteste ist der Weg dahin!
  2. für ein zukünftiges Projekt brauche ich eine Übertragungsmethode für große Dateien (die Rede ist hier von schätzungsweise 20 MB pro Datei, größere Dateien sind sehr wahrscheinlich).
    Die normale POST-Methode ist von ihrer Benutzung her zwar sehr einfach, aber bei solch großen Dateien nicht mehr sinnvoll.

    Ok bei grossen Dateien, aber sind 20 MB grosse Dateien? Kommt ganz auf die verwendete Infrastruktur an.

    Daher meine Frage:
    Welche Übertragungsmethode wäre am sinnvollsten?

    rsync - aber das ist was, das nicht gerade fuer "Otto-Endanwender" gedacht ist.

    Eine Überlegung von mir war FTP, das eigentlich am Besten dafür geeignet sein sollte - allerdings brauche ich dazu einen FTP-Server, und bis jetzt wäre es mir sehr recht, wenn ich nur einen HTTP-Server dafür benutzen könnte.

    Evtl. kann man das via WebDAV erledigen [1]

    Die Dateien sollen einfach über ein Web-Interface übertragbar sein, notfalls wird die POST-Methode als letzte Möglichkeit eingerichtet.

    Wenn es Webinterface seinen soll, dann geht es fast nur ueber POST.

    Ich dachte bisher an ein Java-Applet, das mit einem Socket die Daten an den Server überträgt.

    Dieses Applet muss dann erlaubt werden, das es einen Socket aufmachen darf und vor allen das es auf der lokalen Festplatte rumspielen darf => hohes Sicherheitsrisiko. Wenn es die Anwender mit machen, gut.

    Aber meine Meinung ist, dass selbst 20 MB via POST kein Problem darstellen, wenn es nicht zuviele werden. Wenn mit mehrern Upload (==10+) gleichzeitig gerechnet werden kann, kann man noch auf einen "leichteren" Webserver[2] umsteigen um den "normalen" Webserver zu entlasten.

    [1] http://de.wikipedia.org/wiki/WebDAV
    [2] http://www.acme.com/software/thttpd/

    1. Hallo Jens,

      Die normale POST-Methode ist von ihrer Benutzung her zwar sehr einfach, aber bei solch großen Dateien nicht mehr sinnvoll.

      Ok bei grossen Dateien, aber sind 20 MB grosse Dateien? Kommt ganz auf die verwendete Infrastruktur an.

      Es ist keine Intranet-Anwendung, sondern für das Internet gedacht.
      Da sind 20 MB nicht so ohne, vor allem, wenn die Dateien nach einer abgebrochenen Übertragung (wie bei der POST-Methode) nicht mehr fortgesetzt werden können.

      Daher meine Frage:
      Welche Übertragungsmethode wäre am sinnvollsten?

      rsync - aber das ist was, das nicht gerade fuer "Otto-Endanwender" gedacht ist.

      rsync ist für meine Zwecke unbrauchbar, genau aus diesem Grund.

      Eine Überlegung von mir war FTP, das eigentlich am Besten dafür geeignet sein sollte - allerdings brauche ich dazu einen FTP-Server, und bis jetzt wäre es mir sehr recht, wenn ich nur einen HTTP-Server dafür benutzen könnte.

      Evtl. kann man das via WebDAV erledigen [1]

      WebDAV scheint noch nicht so gut verbreitet zu sein, als dass ich es für diesen Zweck nehmen könnte.

      Die Dateien sollen einfach über ein Web-Interface übertragbar sein, notfalls wird die POST-Methode als letzte Möglichkeit eingerichtet.

      Wenn es Webinterface seinen soll, dann geht es fast nur ueber POST.

      Oder halt über eingebundene Plugins bzw. Applets, wobei ein Java-Applet noch die beste Alternative wäre.

      Dieses Applet muss dann erlaubt werden, das es einen Socket aufmachen darf und vor allen das es auf der lokalen Festplatte rumspielen darf => hohes Sicherheitsrisiko. Wenn es die Anwender mit machen, gut.

      Das Java-Applet könnte ich als Open Source veröffentlichen, sodass sich jeder den Quelltext anschauen und sich von der Sicherheit überzeugen kann.
      Natürlich bekommen Endanwender nur die class-Datei, in die sie nicht schauen können (ok, mit Decompiler natürlich schon).

      Ich überlege mir aber momentan, ob ich nicht gleich eine Java-Anwendung für die Clients schreiben sollte. Mir dünkt, das wäre die sinnvollste Variante.

      Aber meine Meinung ist, dass selbst 20 MB via POST kein Problem darstellen, wenn es nicht zuviele werden. Wenn mit mehrern Upload (==10+) gleichzeitig gerechnet werden kann, kann man noch auf einen "leichteren" Webserver[2] umsteigen um den "normalen" Webserver zu entlasten.

      Da würde ich dann aber vermutlich gleich einen FTP-Server nehmen, der ist genau dafür gedacht. ;-)

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      http://emmanuel.dammerer.at/selfcode.html
      1. Hallo Marc,

        Oder halt über eingebundene Plugins bzw. Applets, wobei ein Java-Applet noch die beste Alternative wäre.

        tja, und da frage ich mich natürlich, wie wichtig diese Webapplikation den Nutzern nachher ist: Wichtig genug, dass sich jeder eine JVM installieren würde? Ich würd's nicht tun.

        Das Java-Applet könnte ich als Open Source veröffentlichen, sodass sich jeder den Quelltext anschauen und sich von der Sicherheit überzeugen kann.

        Als vertrauensbildende Maßnahme eine gute Idee.

        Aber meine Meinung ist, dass selbst 20 MB via POST kein Problem darstellen, wenn es nicht zuviele werden. Wenn mit mehrern Upload (==10+) gleichzeitig gerechnet werden kann, kann man noch auf einen "leichteren" Webserver[2] umsteigen um den "normalen" Webserver zu entlasten.

        @Jens: Ich dachte, es ginge hier eher um clientseitige als um serverseitige Bedenken und Überlegungen.

        Da würde ich dann aber vermutlich gleich einen FTP-Server nehmen, der ist genau dafür gedacht. ;-)

        Alles in allem würde ich das auch für die beste Lösung halten. Alles andere ist IMHO nur ein Notbehelf.

        Schönen Tag noch,
         Martin

        --
        F: Was ist eigentlich aus deinem schlimmen Durchfall geworden?
        A: Mein Arzt hat mir Valium verschrieben.
        F: Und das hilft?
        A: Naja, ich mach mir immer noch in die Hose. Aber inzwischen ist es mir egal.
      2. Hallo,

        Evtl. kann man das via WebDAV erledigen [1]

        WebDAV scheint noch nicht so gut verbreitet zu sein, als dass ich es für diesen Zweck nehmen könnte.

        Der Windows Explorer kann ab einer bestimmten Version WebDAV-Resourcen als Netzlaufwerke einbinden (oder irgendwie sowas ähnliches, hab das nie ausprobiert). Insofern dürfte die Verbreitung ziemlich hoch sein.

        Viele Grüße,
        Christian

        --
        "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup