AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Idhttp wie an den Dateinamen kommen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Idhttp wie an den Dateinamen kommen ?

Ein Thema von Blamaster · begonnen am 13. Apr 2010 · letzter Beitrag vom 14. Apr 2010
Antwort Antwort
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

Idhttp wie an den Dateinamen kommen ?

  Alt 13. Apr 2010, 21:54
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
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#2

Re: Idhttp wie an den Dateinamen kommen ?

  Alt 13. Apr 2010, 22:25
Nein. Das geht - zum Glück - nicht.
Warum sollte der Webserver seine Dateipfade preisgeben?

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Idhttp wie an den Dateinamen kommen ?

  Alt 13. Apr 2010, 22:31
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.
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#4

Re: Idhttp wie an den Dateinamen kommen ?

  Alt 13. Apr 2010, 22:55
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Idhttp wie an den Dateinamen kommen ?

  Alt 13. Apr 2010, 23:34
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 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)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Idhttp wie an den Dateinamen kommen ?

  Alt 14. Apr 2010, 08:51
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Idhttp wie an den Dateinamen kommen ?

  Alt 14. Apr 2010, 10:01
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#8

Re: Idhttp wie an den Dateinamen kommen ?

  Alt 14. Apr 2010, 17:49
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
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Idhttp wie an den Dateinamen kommen ?

  Alt 14. Apr 2010, 17:59
Wär mir jetzt auf Anhieb nicht bekannt
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#10

Re: Idhttp wie an den Dateinamen kommen ?

  Alt 14. Apr 2010, 18:33
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:55 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