Tom: Angebotener Download bricht immer ab.

Beitrag lesen

Hello,

Ein Workaround, um die Gefahr des direkten Linkens zu vermindern:
Kopiere das File unter einem Zufallsnamen in ein spezielles Verzeichnis und linke auf diesen Zufallsnamen.

Von Zeit zu Zeit löschst Du dann alle Files in diesem Verzeichnis. Das kannst Du so ähnlich machen, wie der Garbage Collector von PHP, also z.B. bei jedem zehnten Mal Reinkopieren wird das Verzeichnis gescannt auf Files, die älter sind als z.B. eine Stunde und die werden dann gelöscht.

Um die Zeitabfrage billiger zu machen, kannst Du den Timestamp auch vor den Zufallsnamen setzen.

So kann das Ausliefern dann vom Server direkt geschehen, der dann auch Chunked arbeiten kann. Ob das direkte Ausliefern einwandfrei funktioniert, würde ich aber vorher nochmal genau ausprobieren, z.B. mit einem großen PDF-File. Der Adobe-PDF-Reader arbeitet z.B. chunked, wenn er es angeboten bekommt.

Aber führt das nich zu extrem hohem Trafik, wenn ich die Files immer kopiere?

Das findet doch nur auf Anforderung im Filesystem des Servers intern statt.

Aber es wär ne Möglichkeit die Files mit ner Timestamp zu kopieren und alles was älter als 24 Stunden is wird gelöscht. Man könnte zudem dann ja vorher noch prüfen ob das File schon kopiert wurde und die Timestamp im Name des Files auf 0 setzen so das das File wieder 24 Studen zur Verfügung stände.

1. Server sendet Seite mit Formular, auf dem Files zum Download angeboten werden
2. Client sendet angehaktes Formular an Server
3. Server nimmt die dazu passend in der Session hinterlegten Filenamen und macht ein
   Zip-Archiv daraus. Dieses stellt er in einem Verzeichnis unter einem Key ([timestamp].[key].zip)
   zur Verfügung und sendet dem Client einen Relocation-Header auf diese Ressource
4. Client lädt die Ressource herunter und speichert sie oder macht sonstwas damit

Bei jedem (x-ten) Aufruf des Anforderungsscriptes prüft der Server, ob es Files gibt im Downloadverzeichnis, die älter als z.B. 10 Minuten sind und löscht diese.

Für das Downloadverzeichnis müssen selbstverständlich die Indexes ausgeschaltet sein, also

options -indexes

in die .htaccess oder besser in die Virtual-Host-Konfiguration für dieses Verzeichnis eintragen.

Ob der Client das/die File(s) tatsächlich heruntergeladen hat, kannst Du so zwar nicht feststellen. Das erkennst Du aus den Logs. Aber ob er sie angefordert hat, kannst Du sehen. Und wenn jedem Client nur "seine" Files angeboten werden, dann kann er auch keine anderen herunterladen.

Am besten sit es, beim Aufruf des Angebotsformulares schon die Zugriffsprüfung zu machen und dem und die resultierende Liste in die Session einzutragen. Dem Client sendest Du nicht den wahren Namen, sondern nur den Index aus der Session zum Auswählen. Files, die nicht in der Session stehen, können nicht heruntergeladen werden.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de