Einzelnen Beitrag anzeigen

dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#1

Problem mit IdHTTP.get mit Fortschrittsanzeige

  Alt 30. Jun 2007, 20:46
Hi

ich bin grad dabei mir nen updater zu schreiben.
Zum downloaden mit Fortschrittsanzeige über IdHTTP.get hab ich hier ne Function gefunden, die ich leicht umgeändert habe:

Delphi-Quellcode:
function Downloaden(Source: String): Boolean;
var
  BytesKopiert, BytesInsgesamt : int64;
  lStream: TFileStream;
  con: TextFile;
begin
  AssignFile(con, 'CON:');
  Rewrite(con);

  Write(con, Source + ' wird heruntergeladen... ');
  BytesKopiert := 0;

  IdHTTP1.Head('http://server.de/'+Source);
  BytesInsgesamt := IdHTTP1.Response.ContentLength;
  if BytesInsgesamt = -1 then
  begin
    lStream:=TFileStream.Create(AppPath + Source, fmCreate or fmShareDenyNone);
    try
      idHTTP1.Get('http://server.de/'+Source, lStream);
    finally
      if Assigned(lStream) then lStream.Free;
    end;
    Write(con, #13, Source + ' wird heruntergeladen... OK' + CR);
    CloseFile(con);
    exit;
  end;

  lStream:=TFileStream.Create(AppPath + Source, fmCreate or fmShareDenyNone);
  lStream.Position := 0;
  try
    repeat
      if (BytesInsgesamt-BytesKopiert) > cFileSplitSize then
      begin
        IdHttp1.Request.Range := Format('%d-%d', [BytesInsgesamt, (BytesKopiert+cFileSplitSize-1)]);
      end else
        IdHttp1.Request.Range := Format('%d-', [BytesKopiert]);

      Application.ProcessMessages;

      IdHTTP1.Get('http://server.de/'+Source, lStream); // <-- Hier tritt das Problem auf
      BytesKopiert := BytesKopiert+cFileSplitSize;
      Write(con, #13, Source + ' wird heruntergeladen... ', GetSizeName(BytesKopiert)+'/'+GetSizeName(BytesInsgesamt), ' [', FloatToStr((BytesKopiert/BytesInsgesamt)*100), '%]');
    until (BytesKopiert >= BytesInsgesamt);
  finally
    if Assigned(lStream) then lStream.Free;
    CloseFile(con);
  end;
  Write(con, #13, Source + ' wird heruntergeladen... ', GetSizeName(BytesInsgesamt), ' OK', CR);
end;
Das Problem ist folgende Fehlermeldung:

Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Updater.exe ist eine Exception der Klasse EIdHTTPProtocolException mit der Meldung 'HTTP/1.1 416 Requested Range Not Satisfiable' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Die Stelle wo das Problem auftritt hab ich oben im Quelltext gekennzeichnet.
Das Programm ist eine Konsolenanwendung, und wenn ich die Datei ohne Fortschrittsanzeige runterlade:

Delphi-Quellcode:
  lStream := TFileStream.Create(AppPath + Source, fmCreate);
  IdHTTP1.Get('http://server.de/'+Source, lStream);
  lStream.free;
gehts...

was mach ich falsch?

mfg.Dominik
Dominik
  Mit Zitat antworten Zitat