Autor Téma: FTP upload  (Přečteno 3634 krát)

Offline AlienStar

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 2
FTP upload
« kdy: 22-09-2014, 11:24:46 »
Přeji hezký den.

Mám problém s nahráním souboru na server.
Stahovat (ftp.Get) funguje bez problému.

Pokud ho ovšem chci nahrát na server, tak se mi program sekne.
Sekne se přesně v úkonu : ftp.Put(Path + EditHDD.Text, EditFTP.Text);

Nevíte někdo v čem by mohla být chyba??
Mockrát děkuji

PS: program mi běží na mobilu pod androidem

Kód: Delphi [Vybrat]
  1.  
  2. ...
  3.  
  4. ftp.Host     := Edit1.Text;
  5. ftp.Username := Edit2.Text;
  6. ftp.password := Edit3.Text;
  7. ftp.Port     := 21;
  8.  
  9.  
  10.  try
  11.    if ftp.Connected then ftp.Disconnect;
  12.    ftp.Connect;
  13.    ftp.TransferType := ftASCII;
  14.  
  15.    ftp.Put(Path + EditHDD.Text, EditFTP.Text); //upload
  16.  finally
  17.    ftp.Disconnect;
  18.  end;
  19.  
  20. end;
  21.  
  22.  

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1174
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:FTP upload
« Odpověď #1 kdy: 22-09-2014, 12:10:41 »
a nebude to jen tim, ze upload probiha? Tyhle prace by melo delat samostatne vlakno, aby to neblokovalo.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:FTP upload
« Odpověď #2 kdy: 22-09-2014, 12:51:32 »
můžeš ještě zkusit pasivní mód přenosu, ale to by nejspíš zatuhl i ten get

Offline AlienStar

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 2
Re:FTP upload
« Odpověď #3 kdy: 22-09-2014, 13:40:08 »
Jenže ten soubor má pouze 10Kb.  :-(

Duležita informace pro vás je ta, zde soubor se na síť nahraje.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1174
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:FTP upload
« Odpověď #4 kdy: 22-09-2014, 14:04:16 »
Zkousels TransferType binary?
Zkus zmenit timeout.
Put dej do try-except.
Odchytavas zpravy OnXXX a sledujes prubeh?

Offline AlienStar

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 2
Re:FTP upload
« Odpověď #5 kdy: 23-09-2014, 00:19:07 »
Zkoušel jsem  try-except  - NEPOMOHLO - žádná chyba nenastala
Zkoušel jsem  timeout - NEPOMOHLO
Zkoušel jsem  TransferType binary - NEPOMOHLO

Nakonec jak tady radil Mi.Chal. pomohlo

ftp.Passive  := true;

víte někdo proč tohle pomohlo??

všem mockrát děkuji ,, moc jste mi pomohli

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1174
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:FTP upload
« Odpověď #6 kdy: 23-09-2014, 09:00:21 »
Otazka neni, proc to pomohlo (vygoogli si rozdil mezi aktivni/pasivni pripojeni), ale proc to zamrzlo :P
Ale to by chtelo projet to s debuggerem...

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:FTP upload
« Odpověď #7 kdy: 23-09-2014, 09:42:23 »
ftp.Passive  := true;

víte někdo proč tohle pomohlo??

to je dané tím, jak funguje FTP. Normálně očekává, že klient bude mít otevřený nějaký port, kam server posílá data. Pokud nemá veřejnou adresu (třeba za NATem), tak se server nemá kam připojit a klient může čekat donekonečna nebo dokud nevyprší timeout. V pasivním ten port otevírá server, takže se tam klient připojí.

Offline AlienStar

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 2
Re:FTP upload
« Odpověď #8 kdy: 23-09-2014, 10:04:31 »
aha,, tak to jo.

Mockrát děkuji za vysvětlení (Mi.Chal.)

------------------------------------------------------------------------------------------------------------------------------------------------

Ještě mám jeden dotaz.

Když se podívám do ini souboru odeslaném na server, tak první znak je otazník, jak je to možné??

Zkoušel jsem ftp.TransferType := ftASCII; i ftBinary;
nepomohlo to :-(


Kód: Delphi [Vybrat]
  1. ?[A]
  2. A=2014
  3.  
  4. [Data]
  5. OUT1=1
  6. OUT2=1
  7. OUT3=1
  8. OUT4=1
  9.  

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:FTP upload
« Odpověď #9 kdy: 23-09-2014, 10:15:23 »
Ještě mám jeden dotaz.

Když se podívám do ini souboru odeslaném na server, tak první znak je otazník, jak je to možné??

Tipoval bych soubor v UTF-8 s BOM. Ale to jsou tři byty.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3004
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:FTP upload
« Odpověď #10 kdy: 23-09-2014, 10:28:10 »
Ještě mám jeden dotaz.

Když se podívám do ini souboru odeslaném na server, tak první znak je otazník, jak je to možné??

Tipoval bych soubor v UTF-8 s BOM. Ale to jsou tři byty.

A je to opravdu otaznik, nebo to je neco co nekdo neumi zobrazit a zobrazi ho jako otaznik. Co kdyby jsi sem hodil jako prilohu to ini? (mozna jako zip, protoze forum je celkem citlive na prilohy).
Embarcadero MVP - Czech republic

Offline AlienStar

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 2
Re:FTP upload
« Odpověď #11 kdy: 23-09-2014, 10:48:52 »
přikládám soubor

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1065
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:FTP upload
« Odpověď #12 kdy: 23-09-2014, 10:54:12 »
UTF-8 /unix

Offline AlienStar

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 2
Re:FTP upload
« Odpověď #13 kdy: 23-09-2014, 11:48:29 »
jak to tedy mám poslat na server aby to bylo bez těch znaků ??

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1174
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:FTP upload
« Odpověď #14 kdy: 23-09-2014, 12:00:37 »
Pri prenosu nedochazi ke zmene souboru. Predpokladam, ze uz to tam mas takto ulozene.

Offline AlienStar

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 2
Re:FTP upload
« Odpověď #15 kdy: 23-09-2014, 12:02:20 »
když ho načtu do aplikace bez toho znaku, a pak hned uložím, už tam ten znak je :-(

napadá vás někoho co bych mohl vyzkoušet ??

Popř. nějaký příklad,, nejsem moc zkušený :-(

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3004
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:FTP upload
« Odpověď #16 kdy: 23-09-2014, 12:03:20 »
jak to tedy mám poslat na server aby to bylo bez těch znaků ??


Spravna otazka je: jak mám vytvorit ten soubor aby tam nebyl ten UTF8 BOM protoze jak rika < z > pri prenosu v binarnim modu ke změně nedochází.

Jak děláš ten soubor?
Embarcadero MVP - Czech republic

Offline AlienStar

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 2
Re:FTP upload
« Odpověď #17 kdy: 23-09-2014, 12:12:08 »
takto:

Kód: Delphi [Vybrat]
  1.  
  2. ...
  3.  
  4.  
  5. ftp.Host     := Edit1.Text;
  6. ftp.Username := Edit2.Text;
  7. ftp.password := Edit3.Text;
  8.  
  9.  
  10.  
  11. try
  12.   try
  13.    if ftp.Connected then ftp.Disconnect;
  14.    ftp.Connect;
  15.    ftp.Get(EditFTP.Text, Path + EditHDD.Text); //download
  16.   except
  17.     on E : Exception do
  18.     Begin
  19.       ShowMessage('Chyba : ' + E.ClassName + ' : ' + E.Message);
  20.       Label7.Text := 'Data NEnačtena'; Timer1.Enabled := true;
  21.       Button1.Visible := True;
  22.       Chyba := True;
  23.     End;
  24.   end;
  25.  
  26.  finally
  27.    ftp.Quit;
  28.    ftp.Disconnect;
  29.  end;
  30.  
  31.  
  32.  
  33. if Chyba then Exit;
  34.  
  35. Button1.Visible := True;
  36. Button2.Visible := True;
  37.  
  38.  
  39. ini := TIniFile.Create(Path + EditHDD.Text);
  40.   try
  41.     Out1stav := ini.ReadInteger('Data', 'OUT1', 0);
  42.     Out2stav := ini.ReadInteger('Data', 'OUT2', 0);
  43.     Out3stav := ini.ReadInteger('Data', 'OUT3', 0);
  44.     Out4stav := ini.ReadInteger('Data', 'OUT4', 0);
  45.     Out5stav := ini.ReadInteger('Data', 'OUT5', 0);
  46.     Out6stav := ini.ReadInteger('Data', 'OUT6', 0);
  47.     Out7stav := ini.ReadInteger('Data', 'OUT7', 0);
  48.     Out8stav := ini.ReadInteger('Data', 'OUT8', 0);
  49.     Out9stav := ini.ReadInteger('Data', 'OUT9', 0);
  50.     Out10stav := ini.ReadInteger('Data', 'OUT10', 0);
  51.     Out11stav := ini.ReadInteger('Data', 'OUT11', 0);
  52.     Out12stav := ini.ReadInteger('Data', 'OUT12', 0);
  53.     Out13stav := ini.ReadInteger('Data', 'OUT13', 0);
  54.     Out14stav := ini.ReadInteger('Data', 'OUT14', 0);
  55.     Out15stav := ini.ReadInteger('Data', 'OUT15', 0);
  56.     Out16stav := ini.ReadInteger('Data', 'OUT16', 0);
  57.   finally
  58.     ini.Free;
  59.   end;
  60.  
  61.  

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3342
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:FTP upload
« Odpověď #18 kdy: 23-09-2014, 12:13:48 »
Spravna otazka je: jak mám vytvorit ten soubor aby tam nebyl ten UTF8 BOM protoze jak rika < z > pri prenosu v binarnim modu ke změně nedochází.
Je otazka, jestli ma dneska smysl se necim takovym zabyvat - slusne napsanej soft by se s BOM mel umet vyporadat pri cteni souboru.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:FTP upload
« Odpověď #19 kdy: 23-09-2014, 13:04:46 »
Pri prenosu nedochazi ke zmene souboru. Predpokladam, ze uz to tam mas takto ulozene.

Taky bych řekl. Pak záleží jenom na aplikaci, která to zobrazuje, jestli UTF-8 podporuje nebo ne. Ta co to neumí zobrazí to smetí na začátku a zmršenou diakritiku. Pokud si tazatel do ini dá něco s diakritikou, tak tam ty otazníky bude mít nejspíš taky.