IdFTP problema upload da Android

di il
3 risposte

IdFTP problema upload da Android

Ciao a tutti, sto avendo problemi ad effettuare l'upload di un file da app Firemonkey con idFTP, di preciso si freeza il trasferimento dopo aver passato 3 byte (me ne sono accorto dal manager di Filezilla Server).
Il problema esiste solo se l'upload avviene da android, se invece lo faccio da Windows ( dove risiede anche il server FTP) non si presenta.
Qui il codice:
procedure TForm1.LBsincronizzaClick(Sender: TObject);
var
  username : string;
  password : string;
  host : string;
  text : string;
  text2 : string;
  artico : string;
  anagra : string;
  fileOr : string;
  busOrd : string;
begin
try
  artico := TPath.GetDocumentsPath + PathDelim +'artico.csv';
  anagra := TPath.GetDocumentsPath + PathDelim +'anagra.csv';
  fileOr := TPath.GetDocumentsPath + PathDelim +'Ordini.csv';
  busOrd := TPath.GetDocumentsPath + PathDelim +'busOrd.csv';
 
   //connessione al server ftp -----------------------------------------------
  IdFTP1.Host := '192.168.1.217';
  IdFTP1.Username := FDQueryINSERT.FieldByName('username').AsString;
  IdFTP1.Password := FDQueryINSERT.FieldByName('password').AsString;
  IdFtp1.Passive := False;
  IdFtp1.ConnectTimeout := 1000;
  if (IdFtp1.Connected = False) then idFtp1.Connect();
  IdFtp1.BeginWork(wmRead);
  IdFTP1.ChangeDir( '/' );
  if FileExists(artico) then DeleteFile(artico);
  if FileExists(anagra) then DeleteFile(anagra);
  if FileExists(fileOr) then DeleteFile(fileOr);
  if FileExists(busOrd) then DeleteFile(busOrd);
  IdFTP1.Get( 'Artico.csv', artico, False );
  IdFTP1.Get( 'Anagra.csv', anagra, False );
  IdFtp1.EndWork(wmRead);
  showmessage('Trasferimento Completato');
  //--------------------------------------------------------------------------
  
  //GENERAZIONE FILE ORDINI---------------------------------------------------
   fileOrdini();
   try
    IdFTP1.BeginWork(wmWrite, -1);
   if FileExists(fileOr) = False then exit;
   if (idFTP1.Size('Ordini.csv') >0) then idFTP1.Delete('Ordini.csv');
   IdFTP1.Put(fileOr, '/Ordini.csv', False);
   IdFTP1.EndWork(wmWrite);
   finally

   end;
   IdFtp1.Disconnect();

except
  Showmessage('Attenzione non è stato possibile sincronizzare il server');
end;
end;

3 Risposte

  • Re: IdFTP problema upload da Android

    Su mobile non credo che puoi impegnare in questo modo il thread principale, prova a fare un thread secondario oppure usa la programmazione parallela.
  • Re: IdFTP problema upload da Android

    Scusa il ritardo nella risposta, puoi darmi qualche riferimento per capire come implementare i thread o la Prog. Parallela su delphi xe8? Grazie in anticipo
  • Re: IdFTP problema upload da Android

    Ciao,
    Come riferimento la wiki di embarcadero http://docwiki.embarcadero.com/RADStudio/Seattle/en/Using_the_Parallel_Programming_Library oppure puoi cercare sul sito di Marco Cantù .
    Per quanto riguarda il tuo problema io userei un TTask, qualcosa del tipo:
    NB: scritto al volo non testato è solo x dare un idea
    
    procedure TForm1.LBsincronizzaClick(Sender: TObject);
    begin
    
      TTask.run( procedure 
      var
        username : string;
        password : string;
        host : string;
        text : string;
        text2 : string;
        artico : string;
        anagra : string;
        fileOr : string;
        busOrd : string;
      begin
        artico := TPath.GetDocumentsPath + PathDelim +'artico.csv';
        anagra := TPath.GetDocumentsPath + PathDelim +'anagra.csv';
        fileOr := TPath.GetDocumentsPath + PathDelim +'Ordini.csv';
        busOrd := TPath.GetDocumentsPath + PathDelim +'busOrd.csv';
     
       //connessione al server ftp -----------------------------------------------
        IdFTP1.Host := '192.168.1.217';
        IdFTP1.Username := FDQueryINSERT.FieldByName('username').AsString;
        IdFTP1.Password := FDQueryINSERT.FieldByName('password').AsString;
        IdFtp1.Passive := False;
        IdFtp1.ConnectTimeout := 1000;
        if (IdFtp1.Connected = False) then idFtp1.Connect();
        IdFtp1.BeginWork(wmRead);
        IdFTP1.ChangeDir( '/' );
        if FileExists(artico) then DeleteFile(artico);
        if FileExists(anagra) then DeleteFile(anagra);
        if FileExists(fileOr) then DeleteFile(fileOr);
        if FileExists(busOrd) then DeleteFile(busOrd);
        IdFTP1.Get( 'Artico.csv', artico, False );
        IdFTP1.Get( 'Anagra.csv', anagra, False );
        IdFtp1.EndWork(wmRead);
        IdFtp1.Disconnect();    
    end);
    end;
    
    il tutto in una task unica ma puoi dividere le varie operazioni in più task e farle eseguire in parallelo, nella wiki di embarcadero trovi qualche info.
    Poi se c'e' qualcuno che ci capisce di più e può darti più info .... ben venga.
Devi accedere o registrarti per scrivere nel forum
3 risposte