Entwickler-Ecke
Internet / Netzwerk - Upload wia IdHTTP - Fortschritt anzeigen???
ralfi - Mi 02.06.04 18:27
Titel: Upload wia IdHTTP - Fortschritt anzeigen???
Hallo!
Ich lade auf den Server eine Datei hoch:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ... var PicData: TIdMultiPartFormDataStream;
PicData := TIdMultiPartFormDataStream.Create; PicData.AddFile('file', 'C:\Datei.exe', 'application/zip'); IdHTTP1.Post('http://www.homepage.de/cgi-bin/loadPicture.pl?', PicData); ... |
Ich möchte dem User auch zeigen, wie weit der Uploadprocess ist. Beim download ist klar:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| ... procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin ProgressBar1.Max := AWorkCountMax; application.ProcessMessages; end; ... |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| ... procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin Label1.Caption := IntToStr(AWorkCount div 1024) + ' Kb von ' + IntToStr(http.Response.ContentStream.Size div 1024) + ' Kb'; ProgressBar1.Position := AWorkCount; application.ProcessMessages; end; ... |
Kann ich diese Code irgendwie modernisieren, sodass der Upload-Fortschritt angezeigt wird?
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
matze - Mi 02.06.04 20:16
also mit der routine wird doch auch ein upload in der progressbar angezeigt !! bei mir jedenfalls
Kugelblitz - Do 22.03.07 21:56
auch auf die gefahr hin dass ich jetzt ein total altes thema unnütz wieder anspreche: ^^
Ich hab das gleiche problem
die progressbar läuft zwar durch, aber dass ich eine 5 MB datei in 5 sekunden uploade kann wohl nicht sein ;)
außerdem dauert das uploaden (biss ich von der seite auch eine reply bekomme) deutlich länger
der Code im OnWork und OnWorkBegin ist im prinzip der gleiche, anders ist eigentlich nur dass ich außer der datei noch 3 parameter mit poste..
Timi-loader - Mo 21.05.07 01:27
bei mir geht das mit dem upload und progressanzeige auch nicht. :-(
kennt jemand ne andere lösung?
vllt doch datei "per hand" streamen?
mfg
Tino - Mo 21.05.07 09:13
Hast du auch die passenden Ereignisse gesetzt (im OI)?
Timi-loader - Mo 21.05.07 22:32
muss man da noch zusätzlich einen io machen?
also der io hat bei mir dann nur ein onstatus ereignis.
mfg
UGrohne - Di 22.05.07 15:29
Timi-loader hat folgendes geschrieben: |
muss man da noch zusätzlich einen io machen?
also der io hat bei mir dann nur ein onstatus ereignis.
mfg |
Tino meinte, ob Du im Objektinspektor die entsprechenden Ereignisse von IdHttp1 auf die obigen Methoden gesetzt hast. Du brauchst keinen IoStream.
Timi-loader - Di 22.05.07 15:42
achsoo. hab io und oi vertauscht^^ also kla. jo die ereignisse hab ich ja erst angelegt und dann mit dem code gefüllt. (bzw ersetzt)
aber funzen tut das gesamt nicht.. hmm
EDIT: also konkret wird bei mir onwork nur einmal direkt am ende des downloads aufgerufen. aber ich hab die nicht verwechselt.
Delete - Di 22.05.07 15:45
Das ist keine Antwort auf die Frage. Hast du die Ereignisse im OI auch mit der Komponente verknüpft?
k4hvd - Di 22.05.07 16:23
ich würde das hier ausprobieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin if AWorkMode = wmWrite then begin ProgressBar1.Max := AWorkCountMax; application.ProcessMessages; end; end;
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin if AWorkMode = wmWrite then begin Label1.Caption := IntToStr(AWorkCount div 1024) + ' Kb von ' + IntToStr(http.Response.ContentStream.Size div 1024) + ' Kb'; ProgressBar1.Position := AWorkCount; application.ProcessMessages; end; end; |
Gruß
Max
Delete - Di 22.05.07 16:50
Was heißt eigentlich:
Timi-loader hat folgendes geschrieben: |
| aber funzen tut das gesamt nicht.. hmm |
:roll:
Timi-loader - Di 22.05.07 22:32
also ichb hab mir mal ne zählschleife gebaut und die procedure TForm1.IdHTTP1Work wird bei mir nur einmal am ende ausgeführt. mehr nicht. wieso?
mfg
Delete - Di 22.05.07 23:29
Timi-loader hat folgendes geschrieben: |
| also ichb hab mir mal ne zählschleife gebaut und die procedure TForm1.IdHTTP1Work wird bei mir nur einmal am ende ausgeführt. mehr nicht. wieso? |
Setz mal ein Application.ProcessMessages in das OnWork-Ereignis.
Wie groß ist denn die Datei, die du hochlädst?
Timi-loader - Mi 23.05.07 11:16
processmessageges hab ich bereits drinn. die datei mit der ich teste ist ca 900 kb groß. und trotz der eventuellen anzeigeprobleme würde ja in der theorie die zählschleuife auch höher geben. aber das tut sie nur ein mal.
mfg
LexXis - Do 07.06.07 16:23
Ich hatte den Spaß mal beim Download.
Aus irgendeinem Grund wurde da AWorkCoutMax nicht richtig gesetzt.
Hab das dann elegant umgangen indem ich als Maximum meiner Progressbar
die Größe das Streams, den ich hoch/runterladen wollte als Max angegeben hab.
Mag nicht unbedingt korrekt sein, bei mir hat´s aber funktioniert.
mfg lexxis
agent_x - So 23.09.07 09:13
Hallo,
bei mir geht das nicht:
Delphi-Quelltext
1: 2:
| Label1.Caption := IntToStr(AWorkCount div 1024) + ' Kb von ' + IntToStr(http.Response.ContentStream.Size div 1024) + ' Kb'; |
HELP!!!
MfG agent_x
Tino - So 23.09.07 10:07
agent_x hat folgendes geschrieben: |
| bei mir geht das nicht: |
Könntest du das Problem bitte genauer beschreiben.
agent_x - So 23.09.07 13:55
ja bei mir wird im script http und das hinter den kommas rot
unterkritzelt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!