ThomasJ: Download Stream?

Hallo,

mich interessiert seit einiger Zeit ein bestimmtes Problem...

ich würde gerne die genaue URL einer datei vor den usern verstecken. zwar gibt es möglichkeiten über z.B. "mydownload.cgi?file=datei.zip" oder gar mit "mydownload.cgi?id=737895" aber im Endeffekt wird spätestens beim Download die URL bekanntgegeben, da die CGI-Datei bestenfalls weiterleitet.

Doch irgendwann ist mir die Technik aufgefallen, die von FreeDrive (http://www.freedrive.com/) verwendet wird. Der User muss sich dazu einloggen und kann erst dann auf die Dateien zugreifen. Da FreeDrive den Script sehr geschickt versteckt hat, war es mir nicht möglich, den Aufruf rauszufinden :)

Sobald man einen Link anklickt, kommt keine ganze Datei zurück, sondern eine Art "Stream", was beim Download folgendermaßen aussieht:

octet-stream&parameter=xyz&nocheinparameter=abc&...

Ich nehme an, es wird ein Server-Side-Script aufgerufen und liest die Datei "intern" ein, schickt an den Client nur einen Stream (kleine Datenpakete?) zurück und versteckt damit sicher die Quelle der Datei.

Leider bin ich ein miserabler CGI Programmierer, denke aber, das sowas - wenn überhaupt - dann mit CGI geht. Falls das nicht geht, wo liegt das Problem?

Falls ja, gibt es irgendwo ein fertiges Programm?
Alternativ (ggf. sogar noch besser! :) Können Sie mir auch eine PHP3-Lösung vorschlagen... Mit reinen CGI-Befehlen komme ich wohl nicht weit...

Danke
Thomas J.

  1. ich würde gerne die genaue URL einer datei vor den usern verstecken. zwar gibt es möglichkeiten über z.B. "mydownload.cgi?file=datei.zip" oder gar mit "mydownload.cgi?id=737895" aber im Endeffekt wird spätestens beim Download die URL bekanntgegeben, da die CGI-Datei bestenfalls weiterleitet.

    Wenn sie das tut, dann ist CGI m. E. überflüssig (bzw. dient lediglich dazu, den Download für statistische Zwecke zu protokollieren, falls der Anbieter z. B. keinen Zugriff auf das Log des Webservers hat oder so).

    Doch irgendwann ist mir die Technik aufgefallen, die von FreeDrive (http://www.freedrive.com/) verwendet wird. Der User muss sich dazu einloggen und kann erst dann auf die Dateien zugreifen. Da FreeDrive den Script sehr geschickt versteckt hat, war es mir nicht möglich, den Aufruf rauszufinden :)

    Was genau verstehst Du unter "einloggen"? Vielleicht war es gar kein Skript (http://www.teamone.de/selfaktuell/artikel/schroepl01.htm).

    Sobald man einen Link anklickt, kommt keine ganze Datei zurück, sondern eine Art "Stream", was beim Download folgendermaßen aussieht:
    octet-stream&parameter=xyz&nocheinparameter=abc&...
    Ich nehme an, es wird ein Server-Side-Script aufgerufen und liest die Datei "intern" ein, schickt an den Client nur einen Stream (kleine Datenpakete?) zurück und versteckt damit sicher die Quelle der Datei.

    Völlig überflüssig.

    Leider bin ich ein miserabler CGI Programmierer, denke aber, das sowas - wenn überhaupt - dann mit CGI geht.

    • Datei öffnen   (1 Befehl in Perl)
    • Datei einlesen (1 Befehl in Perl)
    • Datei ausgeben (1-2 Zeilen in Perl)
      Fertig ist die Laube.

    Die Datei kann - und sollte! - dann sogar außerhalb des Dokumentbaums liegen. Dann ist "ihr URL" nicht nur unsichtbar, sondern es gibt gar keinen solchen.

    Falls ja, gibt es irgendwo ein fertiges Programm?
    Alternativ (ggf. sogar noch besser! :) Können Sie mir auch eine PHP3-Lösung vorschlagen... Mit reinen CGI-Befehlen komme ich wohl nicht weit...

    ?!!? CGI ist eine Schnittstelle, PHP ist eine Sprache ...

    1. Doch irgendwann ist mir die Technik aufgefallen, die von FreeDrive (http://www.freedrive.com/) verwendet wird. Der User muss sich dazu einloggen und kann erst dann auf die Dateien zugreifen. Da FreeDrive den Script sehr geschickt versteckt hat, war es mir nicht möglich, den Aufruf rauszufinden :)

      Was genau verstehst Du unter "einloggen"? Vielleicht war es gar kein Skript (http://www.teamone.de/selfaktuell/artikel/schroepl01.htm).

      Also ich meine, die Dateien auf dem Server sollen vor fremden Zugriff sicher sein, daher brauch der benutzer einen Benutzernamen und ein Passwort. Damit "loggt er sich ein", d.h. er wird auf seine seite gelassen, eine SessionID wird dazu erstellt.

      Leider bin ich ein miserabler CGI Programmierer, denke aber, das sowas - wenn überhaupt - dann mit CGI geht.

      • Datei öffnen   (1 Befehl in Perl)
      • Datei einlesen (1 Befehl in Perl)
      • Datei ausgeben (1-2 Zeilen in Perl)
        Fertig ist die Laube.

      Die Datei kann - und sollte! - dann sogar außerhalb des Dokumentbaums liegen. Dann ist "ihr URL" nicht nur unsichtbar, sondern es gibt gar keinen solchen.

      Ist das wirklich nicht mehr? ich meine, wenn ich z.B. etwas ausgebe (mit print oder wir auch immer?!) dann erscheint es ja auf dem bildschirm - oder nicht?

      Falls ja, gibt es irgendwo ein fertiges Programm?
      Alternativ (ggf. sogar noch besser! :) Können Sie mir auch eine PHP3-Lösung vorschlagen... Mit reinen CGI-Befehlen komme ich wohl nicht weit...

      ?!!? CGI ist eine Schnittstelle, PHP ist eine Sprache ...

      Naja, da habe ich mich wohl undeutlich ausgedrückt. mit CGI meinte ich die "kleinen" progrämmchen, deren dateien die endung .CGI haben.
      in diesem fall spreche ich von Perl :)

      wenn das so einfach ist, dann sollte das mit PHP ja auch gehen...

      tut sich da nicht noch ein problem auf? ich meine, würde dann mein script nicht warten, bis die datei eingelesen ist, und dann erst den "download anbieten"???

      gruß
      Thomas J. mailto:t.jaworski@finec.de

      1. Hallo

        Um zu verhindern, das die Datei am Bildschirm angezeigt wird, mußt du nut den richtigen Mimetype zurückgeben.
        text/palein, text/html etc. werden natürlich angezeigt.

        Das Programm würde in demfall warten, aber du kannst auch abwechselnd eine Zeile einlesen und dann eine
        ausgeben. Das das schneller ist glaube ich nicht.

        Tschüs

        Daniel

      2. Fertig ist die Laube.
        Die Datei kann - und sollte! - dann sogar außerhalb des Dokumentbaums liegen. Dann ist "ihr URL" nicht nur unsichtbar, sondern es gibt gar keinen solchen.
        Ist das wirklich nicht mehr? ich meine, wenn ich z.B. etwas ausgebe (mit print oder wir auch immer?!) dann erscheint es ja auf dem bildschirm - oder nicht?

        Was der Browser damit tut, hängt von dem MIME-Typ ab, den Du in der (von mir unterschlagenen) nullten der drei Zeilen mitschickst.

        wenn das so einfach ist, dann sollte das mit PHP ja auch gehen...

        Da mußt Du PHP-freaks fragen - ich weiß nicht, wie man in PHP auf Dateien zugreifen kann.

        tut sich da nicht noch ein problem auf? ich meine, würde dann mein script nicht warten, bis die datei eingelesen ist, und dann erst den "download anbieten"???

        Du kannst genauso gut die Datei zeilenweise lesen und jede Zeile sofort ausgeben.
        Aber das ändert praktisch nichts: Darauf, inwiefern der Webserver diese Ausgaben puffert oder direkt ausgibt, hast Du m. E. wenig Einfluß.