Friedrich: Dateidownload per script

hi ich möchte in meinem Webserver-Script ein Dateidownload anbieten.
also wenn man aufruft http://meineip/getfile?fileid="2314" und dann eben die Datei mit der id 2314 bekommt, allerdings möchte ich die Datei verändern, z.B. alle e durch a ersetzen zum Beispiel.

Natürlich könnte man einfach die Datei bei Aufruf der Seite erst komplett einlesen, verändern und dann wieder ausgeben. Aber ich dachte mir, dass das bei grossen Dateien von 1gb+, vttl nicht das beste Verfahren ist erst die komplette Datei einzulesen sondern, lieber die einzelnen Dateiteile erst dann zu lesen+ändern wenn sie auch tatsächlich geschickt werden.

Nun ist es leider so, dass alle Methoden die ich kenne so funktionieren, dass bei Aufruf einer Seite erst die komplette Rückgabedatei berechnet wird und dann zurückgesendet gesendet wird. Ich will es aber anders, ich will sozusagen  das der n+1 te teil der Datei erst berechnet wird wenn der n te teil bereits gesendet wurde gibt es da eine Lösung für?

würde mich über ein lösung in C#/aspx oder php am meisten freuen aber auch andere Losungen sind mir sicher hilfreich.

  1. Lieber Friedrich,

    in PHP hätte ich die fragliche Datei mittels fread in Fragmenten eingelesen und die notwendigen Ersetzungen vorgenommen, um das Ergebnis an den Browser zu senden.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Lieber Friedrich,

      in PHP hätte ich die fragliche Datei mittels fread in Fragmenten eingelesen und die notwendigen Ersetzungen vorgenommen, um das Ergebnis an den Browser zu senden.

      Liebe Grüße,

      Felix Riesterer.

      hm aber dann ist es ja wieder so das ich erst die gesamte Datei einlese und sie dann erst zurücksende oder?

      ich wollte ja, dass nur das berechnet wird, was auch tatsächlich gesendet wird damit z.B. falls der Benutzter bei 50% den Download abbricht auch nur 50 -60% berechnet(gelsesen un ersetzt) wurden, und so nicht 40% umsonst bechechnet wurden.

      1. ich wollte ja, dass nur das berechnet wird, was auch tatsächlich gesendet wird damit z.B. falls der Benutzter bei 50% den Download abbricht auch nur 50 -60% berechnet(gelsesen un ersetzt) wurden, und so nicht 40% umsonst bechechnet wurden.

        Und wenn der Benutzer den Download dreimal neu startet, weil irgendwas schiefläuft, berechnest du zweimal 50% umsonst .....

        Was willst du denn erreichen? Bessere Performance auf dem Server?
        Dann halte ich diesen Ansatz für falsch, da der Server immer im Moment des Downloads die ganze Arbeit machen muss. Besser wäre es, die Dateien dann zu berechnen, wenn der Server eh kaum was zu tun hat.

        1. Was willst du denn erreichen? Bessere Performance auf dem Server?
          Dann halte ich diesen Ansatz für falsch, da der Server immer im Moment des Downloads die ganze Arbeit machen muss. Besser wäre es, die Dateien dann zu berechnen, wenn der Server eh kaum was zu tun hat.

          aber man weiss ja erst bei Aufruf was berechnet werden soll.(also wie genau die Datei verändert werden soll).

          Und wenn der Benutzer den Download dreimal neu startet, weil irgendwas schiefläuft, berechnest du zweimal 50% umsonst .....

          Und und jede Möglichkeit zwischenzuspeichern ist wegen der Menge an Möglcihkeiten unmöglich.

          1. aber man weiss ja erst bei Aufruf was berechnet werden soll.(also wie genau die Datei verändert werden soll).

            Dann würde ich die Datei berechnen und dann z.B. per Mail versenden.

            Und und jede Möglichkeit zwischenzuspeichern ist wegen der Menge an Möglcihkeiten unmöglich.

            Da du nicht sagst, was du eigentlich bezweckst, kann ich dir das nur glauben.

            1. Da du nicht sagst, was du eigentlich bezweckst, kann ich dir das nur glauben.

              also was ich wirklich will ist das folgende:
              ich will mit einem http web server abieten, mehrere (sehr viele) dateien runterzuladen. nun könnte ich es entweder so machen das ich die dateien einzeln runterlade aber dann hätte der enbenutzer sehr viele Dateien im download Ordner was ich eher unschön fände.

              also dachte ich mir ich packe das ganze mit .tar (das .tar format macht im grunde nicht mehr alls die dateien alle aneinander zu klatschen)

              da ich immer erst bei der Anfoderung weiss, welche Dateien tatsächlich runtergeladen werden sollen, kann die die die dateien auch nicht vorher taren

              Aber alle dateien sofort einzulesen und zusammenzusetzen bei der anfrage erschein mir wie ich schon im esten post gesagt habe auch nicht optimal (grade bei vielen und grossen dateien).

              deshalb dachte ich mir ich mache so das ich z.B. die letzten 50% der augegebenen tar datei erst eingelesen und berechnet werden wenn die acuh wirklich gebraucht werden.

              1. also dachte ich mir ich packe das ganze mit .tar (das .tar format macht im grunde nicht mehr alls die dateien alle aneinander zu klatschen)

                Das ist was völlig anderes als deine Anforderung im OP

                da ich immer erst bei der Anfoderung weiss, welche Dateien tatsächlich runtergeladen werden sollen, kann die die die dateien auch nicht vorher taren

                Das zur Laufzeit zu machen, kann bei vielen Anfragen den Server übel in die Knie zwingen.

                Aber alle dateien sofort einzulesen und zusammenzusetzen bei der anfrage erschein mir wie ich schon im esten post gesagt habe auch nicht optimal (grade bei vielen und grossen dateien).

                Stimmt.

                deshalb dachte ich mir ich mache so das ich z.B. die letzten 50% der augegebenen tar datei erst eingelesen und berechnet werden wenn die acuh wirklich gebraucht werden.

                Und wenn der Download abbricht? Dann ist die .tar wertlos und du hast Bandbreite, Rechenzeit und die Zeit des Benutzers verschwendet.

                Wie gesagt, würde ich das per Mail machen. Evtl. alles packen, auf dem Server ablegen und den Link dann per Mail verschicken. Nach X Stunden löscht du die Datei wieder, damit nichts unnütz die Festplatte zumacht.

                Auf diese Weise kannst du das Packen so steuern, dass der Server immer noch genug Rechenleistung hat um neue Anfragen anzunehmen.

                Diese Methode ist weit verbreitet und wird von einigen grossen Firmen, die ich betreue, verwendet.

                1. Das zur Laufzeit zu machen, kann bei vielen Anfragen den Server übel in die Knie zwingen.

                  da ich den dienst eher für mich selbst gerne hätte rechne ich nicht mit zu vielen anfragen :)

                  Und wenn der Download abbricht? Dann ist die .tar wertlos und du hast Bandbreite, Rechenzeit und die Zeit des Benutzers verschwendet.

                  naja dann hat er immernoch den anfang der datei wo dann ja die dateien die bis jetzt gesendet wurden theoretisch noch drin stehen. also nicht wertlos.

                  Wie gesagt, würde ich das per Mail machen. Evtl. alles packen, auf dem Server ablegen und den Link dann per Mail verschicken. Nach X Stunden löscht du die Datei wieder, damit nichts unnütz die Festplatte zumacht.

                  ja danke das werde ich dann wahrscheinlich so machen, aber eig mach ich mich bei solchern sachen eher ungern abhänig von anderen internet diensten insbesondere, das ich das vttl auch unter anderem auch gerne gerne innerhalb der lokalen lan nutzen würde

                  Das ist was völlig anderes als deine Anforderung im OP

                  ja aber mich interesier auch eher ob man das mit http so machen kann das man eben die datei erstellt während man si sendet.