Jonny 5: Prüfen, ob Datei übertragen (header)

Hallo liebes Forum,

Ich stehe vor folgendem Problem:

Arbeite gerade an einem Dateimanager. Im Userbereich können Dateien per header heruntergeladen werden.

Wenn ein User eine Datei erfolgreich herunterlädt - also komplett überträgt - soll dies in der db gelogt werden.

Weiss jemand, wie ich prüfen kann, ob eine Datei vollständig zum Browser übertragen und auch gespeichert bzw im sich öffnenden Dialog der speicherbutton gedrückt wurde während/nachdem header gesandt werden?

Es soll nur gelogt werden, wenn der User die Datei auch wirklich empfangen hat, nicht aber wenn der User zwar den Dialog zum speichern bekommt, dann aber abbricht (problem: während dialog werden header bereits erfolgreich geschickt?).

Vielleicht geht es auch gar nicht.

Vielen Dank im voraus,
Jonny5

  1. hi,

    Es soll nur gelogt werden, wenn der User die Datei auch wirklich empfangen hat, nicht aber wenn der User zwar den Dialog zum speichern bekommt, dann aber abbricht (problem: während dialog werden header bereits erfolgreich geschickt?).

    Nicht nur Header, auch Dateiinhalt.

    Wenn ich mit schneller Verbindung eine kleinere Ressource herunterlade, ist mein Browser mit dem herunterladen oftmals schon fertig, bevor ich überhaupt nur daran gedacht habe, einen der Buttons "Speichern" oder "Abbrechen" zu klicken.
    Wähle ich Speichern, kopiert der Browser die Datei aus seinem Cache an den Zielort, wähle ich Abbrechen, verwrift der Browser die Datei im Cacheverzeichnis wieder (ggf. erst zu einem späteren Zeitpunkt).

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      Nicht nur Header, auch Dateiinhalt.

      :-)

      Wenn ich mit schneller Verbindung eine kleinere Ressource herunterlade, ist mein Browser mit dem herunterladen oftmals schon fertig, bevor ich überhaupt nur daran gedacht habe, einen der Buttons "Speichern" oder "Abbrechen" zu klicken.
      Wähle ich Speichern, kopiert der Browser die Datei aus seinem Cache an den Zielort, wähle ich Abbrechen, verwrift der Browser die Datei im Cacheverzeichnis wieder (ggf. erst zu einem späteren Zeitpunkt).

      Ja, richtig. Und in beiden Fällen gilt aus der Sicht des Servers (also PHP) der Transfer bereits als abgeschlossen und erfolgreich.

      Dieses Vorladen während des Wartens auf die Benutzereingabe lässt sich speziell beim IE auch ganz eindrucksvoll beobachten. Angenommen, ich habe einen Download angefordert, der längere Zeit dauert. Nun brauche ich, sagen wir mal, fünf Sekunden, bis ich mich entschieden habe, auf "Speichern" zu klicken. In diesen fünf Sekunden hat mein Browser im Hintergrund schon 100kB übertragen. Der IE berechnet nun für die Fortschrittsanzeige fortlaufend die Übertragungsrate als

      bisher übertragene Datenmenge
       -------------------------------
        verstrichene Zeit seit Beginn

      Die Crux ist, dass der IE die Zeit erst ab dem Moment zählt, in dem der Benutzer auf "Speichern" geklickt hat. Nach einer weiteren Sekunde ist die übertragene Datenmenge auf 120kB angewachsen, und er errechnet eine Transferrate von 120kB/1s, obwohl eigentlich kontinuierlich nur 20kB/s übertragen wurden.
      Im weiteren Verlauf der Übertragung nähert sich die Anzeige dann immer mehr der tatsächlichen Übertragungsgeschwindigkeit an, aber im ersten Moment ist sie immer utopisch hoch.

      Ciao,
       Martin

      --
      Wer morgens zerknittert aufsteht, hat den ganzen Tag Gelegenheit, sich zu entfalten.
      1. Hi,

        Nicht nur Header, auch Dateiinhalt.

        :-)

        Ja, das ist es was ich nicht wahrhaben wollte *g*

        Im weiteren Verlauf der Übertragung nähert sich die Anzeige dann immer mehr der tatsächlichen Übertragungsgeschwindigkeit an, aber im ersten Moment ist sie immer utopisch hoch.

        Da freut man sich über das kurzfristige, vermeintliche superzündi :P

        Danke Wahsaga und derMartin für Antworten, logge nun, wenn der Transfer startet, ohne Rücksicht auf Abbruch.

        lG, Jonny 5