Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Idhttp wie an den Dateinamen kommen ? (https://www.delphipraxis.net/150321-idhttp-wie-den-dateinamen-kommen.html)

Blamaster 13. Apr 2010 20:54


Idhttp wie an den Dateinamen kommen ?
 
Hi,

gibt es eine Möglichkeit, direkt über die Idny Komponente an den Dateinamen des auf dem Server hinterlegten Files zu kommen ?

Oftmals hat man ja nur eine Url die dann über mehrere redirects erst an die Datei gelangt und somit hat die Url meist nicht sonderlich viel mit dem dahinter steckenden Dateinamen gemein.

Bietet indy nun eine Funktion, die mir den Dateinamen beschafft ?

Mfg Yannic

Valle 13. Apr 2010 21:25

Re: Idhttp wie an den Dateinamen kommen ?
 
Nein. Das geht - zum Glück - nicht.
Warum sollte der Webserver seine Dateipfade preisgeben?

Liebe Grüße,
Valle

SubData 13. Apr 2010 21:31

Re: Idhttp wie an den Dateinamen kommen ?
 
Ich gehe davon aus, dass er Weiterleitungen im HTTP-Header meint.
Diese kann man auslesen, wie genau kann ich aus dem Kopf heraus jetzt aber auch nicht sagen.

Blamaster 13. Apr 2010 21:55

Re: Idhttp wie an den Dateinamen kommen ?
 
Hi,

mals als Beispiel. Der Chip.de Downloadlink für Antivir sieht so aus:

http://dl.cdn.chip.de/downloads/3374...6b5b1755ab.exe

Wenn ich nun im Browser auf Download klicke steht im Downloaddialog Sie möchten folgende Datei herunterladen: "avira_antivir_personal10_de.exe"

Nun können aber Downloadlinks einer anderen Website nun wieder ganz anders aussehen, so das man keine allgemeingültige Funktion zum auslesen des Dateinamen erstellen kann.

Nun ist ebend die Frage ob die idhttp irgendwie erkennen kann wie die zu ladene Datei nun letzlich wirklich heißt.

Mfg Yannic

himitsu 13. Apr 2010 22:34

Re: Idhttp wie an den Dateinamen kommen ?
 
Zitat:

Zitat von Blamaster
Nun ist ebend die Frage ob die idhttp irgendwie erkennen kann wie die zu ladene Datei nun letzlich wirklich heißt.

Wenn du die HTTP-Weiterleitungen meinst, dann ja ... nur
Zitat:

Zitat von SubData
Ich gehe davon aus, dass er Weiterleitungen im HTTP-Header meint.
Diese kann man auslesen, wie genau kann ich aus dem Kopf heraus jetzt aber auch nicht sagen.

weiß ich da auch nix genaueres.

Aber TIdHttp geht ja selber diese Weiterleitungen nach.
- es fragt die gewünschte URL ab und prüft den zurückgelieferten Header
- kommt dort als Anweisung, daß eine andere URL gelesen werden soll,
fängt es an diese URL zu lesen und das so lange, bis endlich eine Datei geliefert wird (oder bis zu einem Maximum an Umleitungen, wo dann abgebrochen wird)

stOrM 14. Apr 2010 07:51

Re: Idhttp wie an den Dateinamen kommen ?
 
Die Rückgabe vom Header parsen...?!
Experts Exchange

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MemStream: TMemoryStream;
  FileStream: TFileStream;
begin
  MemStream := TMemoryStream.Create;
  try
    IdHTTP1.Get('http://www.deadlybossmods.com/download.php?id=1', MemStream);
    MemStream.Position := 0;
    FileStream := TFileStream.Create(FileName, fmCreate);
    try
      MemStream.SaveToStream(FileStream);
    finally
      FileStream.Free;
    end;
  finally
    MemStream.Free;
  end;
end;
 
procedure TForm1.IdHTTP1HeadersAvailable(Sender: TObject;
  AHeaders: TIdHeaderList; var VContinue: Boolean);
var
  ContentDisposition: string;
begin
  ContentDisposition := AHeaders.Values['Content-Disposition'];
  ContentDisposition := Copy(ContentDisposition, 1 + Pos(';', ContentDisposition), MaxInt);
  ContentDisposition := StringReplace(ContentDisposition, 'filename=', '', [rfIgnoreCase]);
  ContentDisposition := StringReplace(ContentDisposition, '"', '', [rfReplaceAll]);
  FileName := ContentDisposition;
end;
 
end.

himitsu 14. Apr 2010 09:01

Re: Idhttp wie an den Dateinamen kommen ?
 
Zitat:

Zitat von stOrM
Die Rückgabe vom Header parsen...?!

Stimmt, das gibt es ja auch noch.
Das DownloadScript der DP leitet nicht an eine Datei weiter, sondern gibt sie selber aus
und liefert dazu dann noch einen Dateinamen aus der DB zurück.

Blamaster 14. Apr 2010 16:49

Re: Idhttp wie an den Dateinamen kommen ?
 
Lässt sich der Header noch an einer anderen Stelle als im HeadersAvailable Event abfangen ?

Irgendwie über Idhttp.Request.XXX oder Idhttp.Response.XXX ?

Mfg Yannic

stOrM 14. Apr 2010 16:59

Re: Idhttp wie an den Dateinamen kommen ?
 
Wär mir jetzt auf Anhieb nicht bekannt

Blamaster 14. Apr 2010 17:33

Re: Idhttp wie an den Dateinamen kommen ?
 
Hi,

kann es sein, dass Content-Disposition nicht immer im Header zurückgegeben wird ?

Bei diesem Link zumindest taucht es im Header nicht auf:

http://dl.cdn.chip.de/downloads/3803...105dabef82.exe

Woran liegt das ?

Mfg Yannic


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz