Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idHttp Komponente ignoriert mein ContentRange (https://www.delphipraxis.net/88504-idhttp-komponente-ignoriert-mein-contentrange.html)

gsh 16. Mär 2007 13:01


idHttp Komponente ignoriert mein ContentRange
 
Hi DPler

Ich hab in leztzer Zeit Probleme mit der idHTTP komponente von den indys und zwar mit ContentRange
Delphi-Quellcode:
IdHTTP.Request.ContentRangeStart := BytePosition;
if (DownloadFileList[I].ByteSize-BytePosition) > cFileSplitSize then
begin
  IdHTTP.Request.ContentRangeEnd := BytePosition+cFileSplitSize-1;
end
else IdHTTP.Request.ContentRangeEnd := DownloadFileList[I].ByteSize;
IdHTTP.Get(cServerAdresse+DownloadFileList[I].ListItem.Caption, FileStream);
Bei diesem Codestück setzt er ContentRangeStart und ContentRangeEnd. Aber die idHttp ignoriert des einfach und ladet immer die komplette datei herunter (und des dann mehrere male weil des ja in einer schleife ist)
Warum macht die Komponente das? :wall:

Ich verwende den Code bei vielen anderen Porjekten und dort funktioniert alles ohne probleme :wiejetzt:

SubData 16. Mär 2007 14:26

Re: idHttp Komponente ignoriert mein ContentRange
 
Der Server muss das auch unterstützen...

gsh 16. Mär 2007 17:16

Re: idHttp Komponente ignoriert mein ContentRange
 
am server liegt es sicher nicht, weil ich hab des es auf zwei ganz verschieden Server getestet und einer davon ist meiner (und bei dem ist es sicher aktiviert)
die anderen programme von mir funken ja auch ohne prob. mit dem server

gsh 17. Mär 2007 09:56

Re: idHttp Komponente ignoriert mein ContentRange
 
*noch oben schieb*

gsh 18. Mär 2007 17:08

Re: idHttp Komponente ignoriert mein ContentRange
 
*push* :duck:

CK_CK 18. Mär 2007 17:29

Re: idHttp Komponente ignoriert mein ContentRange
 
Zeig' mal mehr Code bitte ;)

Du lädst das ja in einen FileStream, oder? Dann musst du auch beim Create des Streams statt "fmCreate" "fmOpenReadWrite" als Flag verwenden... :stupid:

Viele Grüße,
Chris

gsh 18. Mär 2007 17:44

Re: idHttp Komponente ignoriert mein ContentRange
 
ja des hab ich ja sonst könnte er ja gar nichts machen aber er lädt einfach immer die komplette datei :wall:
k hier ist der ganze code was aber wahrscheinlich nicht sehr viel bringt
Delphi-Quellcode:
    BytePosition := 0;
    FileStream := TFileStream.Create(ExtractFilePath(ParamStr(0))+cTempUpdateDir+DownloadFileList[I].ListItem.Caption, fmCreate or fmShareExclusive);
    try
      repeat
        IdHTTP.Request.ContentRangeStart := BytePosition;
        if (DownloadFileList[I].ByteSize-BytePosition) > cFileSplitSize then
        begin
          IdHTTP.Request.ContentRangeEnd := BytePosition+cFileSplitSize-1;
        end
        else IdHTTP.Request.ContentRangeEnd := DownloadFileList[I].ByteSize;
        IdHTTP.Get(cServerAdresse+DownloadFileList[I].ListItem.Caption, FileStream);
        BytePosition := BytePosition+cFileSplitSize;
        Application.ProcessMessages;
      until (BytePosition >= DownloadFileList[I].ByteSize);
    finally
      FreeAndNil(FileStream);
    end;

CK_CK 18. Mär 2007 17:50

Re: idHttp Komponente ignoriert mein ContentRange
 
Wie ich's vermutet hab': Du benutzt "fmCreate".
Dadurch wird die Datei vorm schreiben komplett geleert. Du musst fmOpenReadWrite verwenden. Dadurch wird der Inhalt nicht gelöscht und die Http-Komponente kann an der passenden Stelle anfangen zu laden.
Du musst dann aber auch prüfen, ob die Datei noch nicht existiert. Dann muss es nämlich trotzdem fmCreate sein...

Viele Grüße,
Chris

gsh 18. Mär 2007 18:05

Re: idHttp Komponente ignoriert mein ContentRange
 
Zitat:

Zitat von CK_CK
Wie ich's vermutet hab': Du benutzt "fmCreate".
Dadurch wird die Datei vorm schreiben komplett geleert. Du musst fmOpenReadWrite verwenden. Dadurch wird der Inhalt nicht gelöscht und die Http-Komponente kann an der passenden Stelle anfangen zu laden.
Du musst dann aber auch prüfen, ob die Datei noch nicht existiert. Dann muss es nämlich trotzdem fmCreate sein...

hä? :wiejetzt:
Die Datei soll ja gelöscht werden wenn sie exestiert. Der Filestream wird ja vor dem download angelegt und dort soll dann die http komponente mit jedem druchlauf der schleife 20kb in die Datei schreiben. aber statt den mit ContentRange vorgegebenen 20 kb saugt die komponente ALLES (also 596 kb) und zwar saugt sie bei jedem durchlauf die kompletten 596KB und nicht 20KB also kommt am schluss einen 10 MB exe raus. :wall:

CK_CK 18. Mär 2007 19:19

Re: idHttp Komponente ignoriert mein ContentRange
 
Sorry, ich hatte da was falsch verstanden ;)

Aber ich hab' die Lösung, da ich gemerkt habe, dass es bei mir auch nicht funktioniert. Du musst folgendes schreiben:
Delphi-Quellcode:
IdHttp.Request.Range := Format('%d-%d', [StartBytes, EndBytes]); //um alles von StartBytes bis EndBytes zu laden
//oder
IdHttp.Request.Range := Format('%d-', [StartBytes]); //um alles ab StartBytes zu laden
Das ContentRangeXXX kannst du komplett weglassen...

Warum das so ist steht [HIER]... (Aber der Code dort ist auch falsch. Man muss das "bytes=" weglassen.) :mrgreen:

Einen schönen Abend noch,
Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
Seite 1 von 2  1 2      

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