Italian [Risolto] [B4J] Client FTP

Aldo's

Active Member
Licensed User
Buongiorno a tutti.
Ho provato a cercare un tutorial per eseguire il download di un file da un server FTP (Altervista), ma non ho trovato nulla sul forum.
Potete darmi una mano?
La mia esigenza è quella di scaricare un singolo file in una determinata cartella.
Grazie
 

LucaMs

Expert
Licensed User
Longtime User
Buongiorno a tutti.
Ho provato a cercare un tutorial per eseguire il download di un file da un server FTP (Altervista), ma non ho trovato nulla sul forum.
Potete darmi una mano?
La mia esigenza è quella di scaricare un singolo file in una determinata cartella.
Grazie
Prima di provare a darti una mano (forse l'ho fatto, in passato), fai una prova "interessante": chiedi a ChatGPT, spiegando bene che usi B4J e, se sì, magari anche B4XPages.
 

Aldo's

Active Member
Licensed User
Prima di provare a darti una mano (forse l'ho fatto, in passato), fai una prova "interessante": chiedi a ChatGPT, spiegando bene che usi B4J e, se sì, magari anche B4XPages.
Ho provato, ma in questo è un disastro.
Mi propone di caricare la libreria FTP (anzichè la libreria NET). Quando gli dico che non esiste la libreria FTP mi propone di inserire la libreria FTP B4X e, se non la trovo di scaricarla da B4X in AddLibrary.
Anche il codice, per quello che ho visto fin ora è un disastro. Lo allego ma, da quello che ho visto fin ora, è un macello:
B4X:
Sub Process_Globals
    Dim ftp As FTP
    Dim downloadFolder As String
End Sub

Sub B4XPage_Created (Args() As Object)
    ' Inizializza la libreria FTP
    ftp.Initialize
    downloadFolder = File.DirApp & "/Download/" ' Cartella per il salvataggio
    If Not(File.Exists(downloadFolder)) Then
        File.MakeDir(File.DirApp, "Download")
    End If
End Sub

Sub DownloadFile
    ' Impostazioni FTP
    Dim server As String = "ftp://ftp.tuoserver.com"
    Dim user As String = "tuoUsername"
    Dim password As String = "tuaPassword"
    Dim remoteFile As String = "/percorso/del/file/da/scaricare.txt"
    Dim localFile As String = downloadFolder & "/fileScaricato.txt"
    
    ' Connessione al server FTP
    ftp.Host = server
    ftp.Username = user
    ftp.Password = password
    ftp.Port = 21 ' Porta di default per FTP
    
    ' Avvio del download
    ftp.Download(remoteFile, localFile)
    
    ' Notifica completamento
    Log("Download completato!")
End Sub

Sub B4XPage_Initialize
    ' Esegui il download quando la pagina viene inizializzata
    DownloadFile
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Prova così:
Sub Class_Globals
    Private Root As B4XView 'ignore
    Private xui As XUI 'ignore
 
    Private mFTP As FTP
    Private mHost, mUser, mPW As String
    Private mPort As Int = 21
End Sub

Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1

    mHost = "ftp.QUI_TUO_NOME_UTENTE.altervista.org"
    mUser = "QUI_TUO_NOME_UTENTE"
    mPW = "QUI_TUA_PW"
 
    mFTP.Initialize("FTP", mHost, mPort, mUser, mPW)
    mFTP.PassiveMode = True
End Sub

Private Sub btnDownload_Click
    Dim ServerFilePath, DestDir, DestFileName As String
    ServerFilePath = "MODIFICA QUESTO"
    FileName = "MODIFICA QUESTO"
    DestDir = File.DirApp ' SE VUOI, MODIFICA QUESTO
    mFTP.DownloadFile(ServerFilePath, True, DestDir, FileName)
End Sub

Private Sub FTP_DownloadCompleted (ServerPath As String, Success As Boolean)
    Log("Download " & IIf(Success, "completed.", "failed."))
End Sub
 
Last edited:

Aldo's

Active Member
Licensed User
Prova così:
Sub Class_Globals
    Private Root As B4XView 'ignore
    Private xui As XUI 'ignore
 
    Private mFTP As FTP
    Private mHost, mUser, mPW As String
    Private mPort As Int = 21
End Sub

Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1

    mHost = "ftp.QUI_TUO_NOME_UTENTE.altervista.org"
    mUser = "QUI_TUO_NOME_UTENTE"
    mPW = "QUI_TUA_PW"
 
    mFTP.Initialize("FTP", mHost, mPort, mUser, mPW)
    mFTP.PassiveMode = True
End Sub

Private Sub btnDownload_Click
    Dim ServerFilePath, DestDir, DestFileName As String
    ServerFilePath = "MODIFICA QUESTO"
    FileName = "MODIFICA QUESTO"
    DestDir = File.DirApp ' SE VUOI, MODIFICA QUESTO
    mFTP.DownloadFile(ServerFilePath, True, DestDir, FileName)
End Sub

Private Sub FTP_DownloadCompleted (ServerPath As String, Success As Boolean)
    Log("Download " & IIf(Success, "completed.", "failed."))
End Sub
Provo e ti dico
 

Aldo's

Active Member
Licensed User
Ho provato e ricevuto un comportamento strano.
Ho usato il tuo codice come qui modificato (praticamente nulla):
B4X:
Sub Class_Globals
    Private Root As B4XView 'ignore
    Private xui As XUI 'ignore
 
    Private mFTP As FTP
    Private mHost, mUser, mPW As String
    Private mPort As Int = 21
End Sub

Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1

    mHost = "miospazio.altervista.org"
    mUser = "user"
    mPW = "password"
    mFTP.Initialize("FTP", mHost, mPort, mUser, mPW)
    mFTP.PassiveMode = True
End Sub

Private Sub bttCaricaCiclo_Click
    Dim ServerFilePath, FileName, DestDir, DestFileName As String
    DestDir = "C:\miacartella"
    FileName = lblCodUtente.Text.Trim & ".db"
    DestFileName = lblCodUtente.Text.Trim & " (" & DateTime.Now & ").db"
    ServerFilePath = "/miapathdelserver" & FileName
     mFTP.DownloadFile(ServerFilePath, True, DestDir, FileName)
End Sub

Private Sub FTP_DownloadCompleted (ServerPath As String, Success As Boolean)
    Log("Download " & IIf(Success, "OK", "KO"))
End Sub

Ricevo in Log: Download OK
Quindi penso: tutto ok
E invece il file è 2 Kb più grosso di quello sul server FTP e quando vado ad aprirlo (sia nella mia app che con un client db) mi restituisce questo errore:
java.sql.SQLException: [SQLITE_CORRUPT] The database disk image is malformed (database disk image is malformed)

La mia impressione è che non lo scarichi pedissequamente, ma non so che cosa possa essere.
Un aiutino?
 

amorosik

Expert
Licensed User
Metti su un server ftp in locale, tipo Filezilla o simili
Poi testi il tuo client e 'vedi' cosa succede lato server
Una volta che ti funziona col tuo server ftp allora provi su Astalavista

Ma vi ricordate Altavista? Sembrava fosse IL motore di ricerca insostituibile per todo lo mundo
Dopo un anno che e' uscito gugol nessuno piu' ha avuto bisogno di Altavista
I piu' giooovani neanche sapranno cosa sia stato
 

Aldo's

Active Member
Licensed User
Scusa, non so se ho capito.
Io ho aperto tramite CyberDuck il mio server ftp su Altervista. Ho provato ad aprire il file con DBBrowser (SQLite) e lo apre correttamente.
Ho fatto anche un'altra prova. Ho scaricato, sempre tramite CyberDuck, il file in locale e l'ho aperto con la mia app e tutto funziona correttamente.
Solo quando faccio il DownloadFTP mi altera il file .db.
 

amorosik

Expert
Licensed User
Hai letto quello che ti ho consigliato (ftp server locale)?
Se hai letto, l'hai provato?
Nel caso avessi provato, il tuo client tira giu' il file correttamente oppure da' lo stesso problema del file corrotto?
 

Sagenut

Expert
Licensed User
Longtime User
Prova con
B4X:
mFTP.DownloadFile(ServerFilePath, False, DestDir, FileName)
perchè non credo che il DB possa essere interpretato come ASCII File.
Nella tua riga hai impostato True.
 

amorosik

Expert
Licensed User
Scarichi Filezilla Server
Lo installi sul pc di lavoro oppure su uno che sia in lan col tuo pc lavoro
Verifichi che eventuali firewall sul pc dove lo installi siano aperti almeno perla porta richiesta, di solito la 21 ma e' configurabile
Nella configurazione server ftp ci aggiungi un utente/password
Fine

La vera domanda da chiarire e': hai provato a farlo?
 

Aldo's

Active Member
Licensed User
La vera domanda da chiarire e': hai provato a farlo?
Se non sapevo come farlo è ovvio che non ho provato...giuro, provo e ti dico
 

amorosik

Expert
Licensed User
Se non sapevo come farlo è ovvio che non ho provato...giuro, provo e ti dico

No non e' ovvio
Ovvio e' aprire un browser e cercare su un qualsiasi motore di ricerca "installare Filezilla Server" e seguire le indicazioni delle n-mila pagine che escono
 
Top