Wysyłanie pliku + postęp

0

Witam, wysyłam plik do skryptu php znajdującego się na serwerze. Wszystko odbywa się przy pomocy TIdHTTP z pakietu Indy(metoda POST). Wszystko ładnie, ale program na czas wysyłania dostaje zawiechy :/ Próbowałem application.processmessage - nic, teraz jeszcze będę bawił się z wątkami może to pomoże.
Chodzi mi równierz o pokazanie postępu wysyłania pliku na np. progressbar.

Jak to wszystko zrealizować ?? Jak już pisałem program na czas wysyłania dostaje zawiechy i nie bardzo wiem jak temu zaradzić, a dzięki temu, że dostaje owej "zawiechy" nie mam jak zrealizować drugiego problemu czyli pokazania postępu wysyłania.

0

Pokombbinuj z watkami.

0

Nie chce byc nie mily, ale sam na to wpadłeś czy może jednak czytałeś to co pisałem. Wiem, że wątki. Ale to raczej żeby pozbyć się problemu "zawiechy", a co z pokazaniem postępu wysyłania pliku ??

0
mr.hex napisał(a)

Wiem, że wątki. Ale to raczej żeby pozbyć się problemu "zawiechy", a co z pokazaniem postępu wysyłania pliku ??

W tym wypadku uzyj go takze na pokazanie postepu. Za kazdym "cyklem" watku wysylania pliku pobierz info o postepie wysylania pliku (nie wiem jak, nie pytaj - nie mam okazji sprawdzic w tej chwili) i wyswietl na ProgressBar'ze. Watki za kluczem do wszystkiego ^^

0

Czytalem to co napisales. Pokazanie postepu nie powinno byc problemem. W watku bedziesz musial realizowac to przez procedure Synchronize. Wez rozmiar przeslanej czesci pliku i podziel przez caly rozmiar, a potem pomnóż przez 100% i juz masz swoj postep :) Potem juz ProgressBar -> watek niech przesowa go co wyslanie kilu pakietow.

0

Dobra, zapodałem już samo wysyłanie plik do wątku. I tak jak myślałem, oraz tak jak pisaliście - rozwiązało to problem zawieszania się programu.

Pozostał jednak drugi błąd, czyli pokazywanie postępu.

Tak więc gwoli wyjaśnienia : plik wysyłam do skryptu php, do którego nie mam dostępu (do kodu), wysyłanie, które teraz odbywa się w wątku wygląda tak :

uses ms;

procedure costam;

var
  ResponseStream: TStringStream;
  MultiPartFormDataStream: TMsMultiPartFormDataStream;

begin
 MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
  ResponseStream := TStringStream.Create('');

  try

    Http.Request.ContentType := MultiPartFormDataStream.RequestContentType;
    MultiPartFormDataStream.AddFile('upfile_0yh23',plik,'application/zip');
    MultiPartFormDataStream.AddFormField('category','1');
 //-------- LISTA KATEGORII -----------------------
 for i := 0 to Form1.ComponentCount-1 do
  begin
   if Form1.Components[i] is TCheckBox then
    begin
     if TCheckBox(Form1.Components[i]).Checked then
      begin
       nazwa := TCheckBox(Form1.Components[i]).Name;
       Delete(nazwa,1,1);
       MultiPartFormDataStream.AddFormField('category',nazwa);
      end;
    end;
  end;
 //--------------------------------------------------

    MultiPartFormDataStream.AddFormField('textarea',Opis_plik.lines.text);
    MultiPartFormDataStream.PrepareStreamForDispatch;
    MultiPartFormDataStream.Position := 0;
     http.Post(ADRES_STRONY',MultiPartFormDataStream,ResponseStream);

    finally
    html := ResponseStream.DataString;
    MultiPartFormDataStream.Free;
    ResponseStream.Free;
   end;

 Potwierdz.OnClick(sender);

end;

unit ms to sposób na wysyłanie plików do skryptu jaki znalazłem w necie.
Jego zawartość to :
http://www.mm.pl/~sl4sh/ms.txt

Tak więc proszę, powiedzcie mi jak moge pokazać postęp wysyłania pliku na np. progress bar. Bo nie bardzo wiem jak zastosować wskazówke którą podał WIktorDelphi.

// tfuu..... jak zwykle coś głupiego walnąłem

wystarczyło w OnWork w TidHTTP dać

if AWorkMode = wmWrite then //wmWrite - czyli wysyłanie
postep.Position := AWorkCount; //postep - progress bar

oraz przy otwieraniu pliku pobrać jego rozmiar i ustawić jako wartość MAX dla progress bar'a

Dzieki wszystkim za info i pomoc =]

1 użytkowników online, w tym zalogowanych: 0, gości: 1