AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Traffic sparen: Wie Datei-Download nur über die Website?
Thema durchsuchen
Ansicht
Themen-Optionen

Traffic sparen: Wie Datei-Download nur über die Website?

Ein Thema von Matze · begonnen am 11. Apr 2008 · letzter Beitrag vom 12. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Traffic sparen: Wie Datei-Download nur über die Website?

  Alt 11. Apr 2008, 20:43
Moin zusammen,

mit einer htaccess-Datei dieses Inhalts verhindere ich, dass bestimmte Dateitypen direkt über den Browser heruntergeladen werden können:

Code:
<FilesMatch "\.(zip|pdf|doc|xls)$">
   deny from all
</FilesMatch>
Wie kann ich allgemein den Download über die Website ermöglichen? Muss ich da manuell irgendwie diverse Header senden oder wie macht man das?

Ein schönes Wochenende wünscht
Matze
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#2

Re: Wie Datei-Download nur über die Website möglich?

  Alt 11. Apr 2008, 21:26
Möchtest du den Download mittels PHP Realisieren?

Dann sieht der Downloader nicht wo sich die eigentliche
Datei befindet.

Damit kannst du selbst den Speed Einstellen
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Wie Datei-Download nur über die Website möglich?

  Alt 11. Apr 2008, 21:34
Hallo Claudio,

jupp, ich habe es vergessen zu erwähnen, das soll mit PHP ablaufen.

Wie mache ich das denn genau?

Da du es angesprochen hast: Die Geschwindigkeit möchte ich zwar nicht drosseln und ich bezweifel auch, dass das mit PHP geht, aber falls das gehen sollte, wäre es interessant zu wissen, wie so etwas realisierbar wäre. Aber wie gesagt, das brauche ich nicht.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Wie Datei-Download nur über die Website möglich?

  Alt 11. Apr 2008, 23:33
Moin Matze,

wenn du die Datei mit readfile(), file_get_contents() oder fopen() anfasst, hat die htaccess gar keine Bedeutung. Diese greift nur bei der direkten Auslieferung durch den Indianer.

Nehmen wir an (GAANZ unsicheres Beispiel), du erwartest an der URL nen File-Parameter:
Code:
header('Content-Disposition: attachment');
header(...); // Die korrekten Header findest du bspw. im 0815-Attachment-MOD fuers phpBB

readfile($_GET['file']);
Natuerlich musst du noch pruefen obs die Datei gibt, ob er drauf zugreifen gibt, usw. So koennte man naemlich auch ne PHP-Datei ziehn, und damit mein ich nicht den Code nach dem Ausfuehren. Also immer schoen brav mit IDs arbeiten oder so.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Wie Datei-Download nur über die Website möglich?

  Alt 12. Apr 2008, 09:07
Hallo Andy,

danke für deine Antwort. Das ist das, was ich vermutet hatte. Ich muss es also manuell über diverse Header lösen.
Ich bin mir nur nicht ganz sicher, ob PHP so konfiguriert ist, dass dies geht, denn in gewisser Weise stellt das öffnen von Dateien mit PHP ein Sicherheitsrisiko dar.
Die Gültigkeit wird übrigens überprüft und zwar anhand eines Datei-Hashs (ich hoffe nur, dieser tritt nicht mal doppelt bei 2 verschiedenen Dateien auf). Im Endeffekt läuft's aber dann über eine ID ab, die beim ersten Eintragen in die DB erzeugt wird.

Das unschöne ist eben auch, dass ich pro Dateityp einen anderen Header senden muss. Aber dann führt wohl kein anderer Weg dran vorbei. Ich teste mal, ob das funktioniert.

Btw: Ich schaue da übrigens nicht in einem phpBB-Mod nach sondern auf SelfHTML.

Grüße


Edit: Ich habe es nun so (nur lokal getestet):

Code:
header('Content-Disposition: attachment; filename="..."');
header('Content-Type: application/pdf');

readfile(...);
Der Download-Dialog ist aber nicht ganz richtig, denn dieser stellt das Icon dar, mit dem eine html-Datei verknüpft ist und zeigt natürlich dann auch entsprechend die falsche Standardanwendung an (s. Anhang).
Lasse ich den Dateinamen (filename="...") übrigens weg, dann steht dort der Name der Datei, die im Browser aufgerufen wird (Bsp: id26.html).

Das ist ein reiner Schönheitsfehler, denn die Datei wird korrekt heruntergeladen. Es wäre aber sinnvoll, wenn der Browser das auch richtig erkennen würde.

Was ist daran noch falsch?
Miniaturansicht angehängter Grafiken
dl_dialog_171.png  
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Wie Datei-Download nur über die Website möglich?

  Alt 12. Apr 2008, 16:11
Hallo,

durch langes Herumprobieren hat sich das Problem nun erledigt. Nach readfile fehlte ein exit. Mit diesem geht alles einwandfrei, wieso auch immer.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#7

Re: Wie Datei-Download nur über die Website möglich?

  Alt 12. Apr 2008, 18:46
Zitat von Matze:
Ich bin mir nur nicht ganz sicher, ob PHP so konfiguriert ist, dass dies geht, denn in gewisser Weise stellt das öffnen von Dateien mit PHP ein Sicherheitsrisiko dar.
Das musst du mir erklaeren. An einem fopen(), fread(), fclose() auf ne Datei ist nichts gefaehrliches dran, jedenfalls nichts gefaehrlicheres als in Delphi. Kritisch wirds erst, wenn du den Dateinamen direkt aus User-Daten (z.B. GPC-Daten) zusammensetzt.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#8

Re: Wie Datei-Download nur über die Website möglich?

  Alt 12. Apr 2008, 19:08
Hallo

Geschwindigkeits Regelung mittels PHP Funktioniert einwandfrei...

Ich benutze das selbst in eigenen Scripten

Falls noch interesse Bestehen sollte bitte melde dich...
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Wie Datei-Download nur über die Website möglich?

  Alt 12. Apr 2008, 19:47
Zitat von alcaeus:
Kritisch wirds erst, wenn du den Dateinamen direkt aus User-Daten (z.B. GPC-Daten) zusammensetzt.
Ja stimmt, wenn man das ausschließen kann, sollte das sicher sein. Ich dachte nur, das wird von manchen Hostern deaktiviert (file_get_contents), doch dem ist wohl nicht so, zum Glück. Online funktioniert das bei mir auch einwandfrei.

@Claudio: Das würde mich brennend interessieren, da ich mir nicht vorstellen kann, wie das gehen soll. Ich dachte immer, das muss direkt am Server konfiguriert werden (Bsp: Proxy).
Da das nicht zum ursprünglichen Thema passte, habe ich den Thementitel geändert und nun passt auch das hier her.
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#10

Re: Traffic sparen: Wie Datei-Download nur über die Website?

  Alt 12. Apr 2008, 20:14
Sehr gut...

Funktionieren tut das zu 100%

Das Prinzip ist einfach.
Das Script überträgt eine gewisse Anzahl an Bytes und
macht dan einfach eine Pause.

Und so kann man auf das KB Genau den Speed Regeln....
Das ist ein feine sache.

Damit könnte man Registrierten Usern mehr Speed Bieten
als nicht registrierten. Ich benutze das Script auf meine
eigenen Filestore http://filestore.endasmedia.ath.cx

Hier nun das Script

Code:
$file = $row_download['file_Path']; // Datei aus Array laden
$speed = 5; // 8,5 kb/s download rate limit
if(file_exists($file) && is_file($file)) { //Überprüfen ob Datei Existiert
    header("Cache-control: private");
    header("Content-Type: application/octet-stream");
    header("Content-Length: ".filesize($file));
    header("Content-Disposition: filename=$file" . "");

    flush();
    $fd = fopen($file, "r");
   while(!connection_aborted()){
    while(!feof($fd)) {
        echo fread($fd, round($speed*1024));
        flush();
        sleep(1);
    }
    fclose ($fd);
}
}
Bei mir Funktioniert der Code....
Viel Spass
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz