Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy-HTTP Get und Zip-Dateien .... (https://www.delphipraxis.net/92945-indy-http-get-und-zip-dateien.html)

Bitworm 29. Mai 2007 10:27


Indy-HTTP Get und Zip-Dateien ....
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen !

Ich habe folgendes Problem: per HTTP-Get fordere ich auf einem
Server einen zip-Datei an. Der Head-Aufruf gibt mir auch die
korrekten Werte zurück, wenn ich aber anschließend die Datei
per HTTP-Get herunterladen möchte gibt es die seltsame Fehlermeldung
(siehe beigefügte Datei).

Der Code:

Delphi-Quellcode:
procedure TForm1.cxButton1Click(Sender: TObject);
var
   BytesKopiert, BytesInsgesamt: int64;
   lStream: TFileStream;
begin
   BytesKopiert := 0;
   IdHTTP.Head(cxTextEdit1.Text);
   BytesInsgesamt := IdHTTP.Response.ContentLength;

   lStream := TFileStream.Create('c:\test.zip', fmCreate or fmShareDenyNone);

   idhttp.Request.ContentType := idhttp.Response.ContentType;
   idHTTP.Get(cxTextEdit1.Text, lstream);

   IdHTTP.Response.ContentStream.Write(lStream, IdHTTP.Response.ContentStream.Size);

   FreeAndNil(lStream);
end;
Die verwendete Indy-Version ist 9, beim IDHttp habe ich HandleRedirects auf True und False
stehen gehabt und es war in beiden Fällen ohne Erfolg. Hat jemand einen Tipp für mich ?

Vielen Dank im vorraus !

CCRDude 29. Mai 2007 10:35

Re: Indy-HTTP Get und Zip-Dateien ....
 
Eigentlich strotzt die gesamte Zeile 15 vor Denkfehlern: für die Größe des zu schreibenden Blocks verwendest Du die Größe des Zielblocks (hier wahrscheinlich dasselbe), dann schreibst Du in einen Stream der nur zum Lesen gedacht ist (vielleicht wolltest Du lesen) und schlußendlich ist die ganze Zeile imho überflüssig, da der Stream ja bereits den Inhalt der heruntergeladenen Datei enthält.

Bitworm 29. Mai 2007 10:57

Re: Indy-HTTP Get und Zip-Dateien ....
 
Zitat:

Zitat von CCRDude
Eigentlich strotzt die gesamte Zeile 15 vor Denkfehlern: für die Größe des zu schreibenden Blocks verwendest Du die Größe des Zielblocks (hier wahrscheinlich dasselbe), dann schreibst Du in einen Stream der nur zum Lesen gedacht ist (vielleicht wolltest Du lesen) und schlußendlich ist die ganze Zeile imho überflüssig, da der Stream ja bereits den Inhalt der heruntergeladenen Datei enthält.

Oki, selbst wenn ich diese Zeile lösche (sie ist eher aus der Verzweifelung heraus entstanden,
deswegen die Denkfehler ;( ): die gezeigte Exception wird durch den Get ausgelöst.
Also muss da schon was nicht stimmen.

marabu 29. Mai 2007 11:31

Re: Indy-HTTP Get und Zip-Dateien ....
 
Hallo Rolf,

die Vorgehensweise im Detail sollte so aussehen:

Delphi-Quellcode:
var
  s: TStream;
begin
  // ...
  s := TFileStream.Create('c:\test.zip', fmCreate);
  try
    HTTP.Get(Edit.Text, s);
  finally
    s.Free;
  end;
end;
Damit wird die Datei vom Server geholt und lokal geschrieben.

Grüße vom marabu

CCRDude 29. Mai 2007 11:39

Re: Indy-HTTP Get und Zip-Dateien ....
 
Hat er aber auch so verwendet... nur daß ein .Head davorkommt und er den ContentType setzt.

Da die beide aber nicht zwingend notwendig sein sollten, würd ichs mal ohne die versuchen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 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