B4A Library Automated FTP Library

New Automated FTP Library


UPDATED 3-24-2014 - Version 1.06 changes the display scale and should look better on the larger display of a tablet. A sample project is now included which shows how to use this library. The sample code requires B4A 3.2+. You can open and view the code with older versions but it will not run because of the newer layout files.


UPDATED 1-24-2014 - Version 1.05 adds a new function for checking for files or folders. It also contains a few other small fixes.
The new command works for Files or Folders. If the last parameter is set to TRUE, it will look for folders, if the last parameter is set to FALSE it will look for files. Because the code runs in the background and is modeless you must have a callback sub in the calling module. Code samples below:

B4X:
'Call the command like this:
FTP.FileOrFolderExist("plane.jpg" , "test/files", False)

B4X:
'Callback sub in calling module:
Sub FTP_FileExist(Found As Boolean)
    If Found Then Log("True") Else Log("False")
End Sub

UPDATED 4-2-2013 - Version 1.02 Corrects an issue where PassiveMode was not working and also corrects an issue where UploadFileSet would not work from File.DirInternal.

Automates the process of sending and receiving files using FTP with Wildcards & File Masks. Version 1.02 is attached. Please post/report back any issues you find, etc.

This library has progress bars for Each File and overall progress. It handles wildcards and multi file types at the same time. Issue one command and transfer multiple files and multiple types! Change the colors, text size and words of all objects on the Progress Dialog to fit the look of your app. Also works in Stealth Mode!

REQUIRES: B4A 2.5 +
Copy the FTP_Auto.jar & FTP_Auto.xml files to the Extra Libraries folder.


ss.png


FTP_Auto
  • Close
    Completes the current Que with any files left to process and then
    closes the connection.
  • CloseNow
    Closes the connection and all other files in the Que are
    ignored and the process is terminated.
  • DeleteFile (DeletePathAndFile As String)
    Deletes a single file from the server.
    Example:

    DeleteFile("public/pictures/airplane1.jpg")
  • DeleteFileSet (VerifyBeforeDelete As Boolean)
    Delete the lastest FileSet in memory from the server.
    If you used a Mask to download a set of files, this function
    will delelete all files in that last set.
    NOTICE: use with care.
  • DownLoadFile (LocalPath As String, ServerPath As String, FileName As String, Delete_FromServer As Boolean)
    Downloads a selected file from the FTP server and optionally deletes the file after successful download
    Example:

    DownLoadFile("/mnt/sdcard/pictures/", "public/downloads/", "airplane.jpg", False)
  • DownloadFileSet (LocalPath As String, Files_Path_And_Mask() As String, Delete_FromServer As Boolean)
    Retrieves a list of files from the server matching the Mask(s) passed to Files_Path_And_Mask() array.
    You should include the full server path in the Mask. It will then download these files to
    the Folder passed in LocalPath. Files_Path_And_Mask() can contain one entry or however many is needed.
    Example:

    DownloadFileSet(File.DirInternal, Array As String("SM*.txt", "public/pictures/pla*.jpg"), False)
  • IsInitialized As Boolean
    Tests whether the object has been initialized.
  • Initialize (Activity As Activity, CalledFrom As Object, FTP_Site As String, UserName As String, PassWord As String, PortNumber As Int, ShowMessages As Boolean, UsePassiveMode As Boolean) As String
    Initializes the object for use. If True is passed for ShowMessages, additional
    messages will be displayed throughout the process. Use the keywords "Activity"
    and "Me" For the first two parameters.
    Example:

    Initialize(Activity, Me, "ftp.yourdomain.com", "userName", "PassWord", "Port", True, False)
  • LastDownloadStats ( As ) As String
    Shows a popup window with the detials of the latest Download(s).
  • LastProcessSuccessful As Boolean
    Returns True if the last Upload or Download process was successful, otherwise returns False.
  • LastUploadStats ( As ) As String
    Show a popup window with details of the latest Upload(s).
  • MakeDir (DirectoryName As String)
    Makes a directory on the FTP server. Does nothing if the directory already exist.
    If you want to make a directory in the root of the server and then a directory under
    it, you must issue the command twice.
    Example:

    MakeDir("test")
    MakeDir("test/datafolder")
  • RemoveDir (DirectoryName As String)
    Removes selected directory from the FTP server
  • SetColors (HeadingColor As Int, TotalProgressColor As Int, FileTextColor As Int, PanelBackgroundColor As Int, FrameColor As Int)
    Used to set colors of each Item in the status dialog.
    NOTE: Passing 0 for any argument with leave that item unchanged
  • SetCompletedDownloadDialog (ShowCompletedDialog As Boolean, DialogText As String)
    If ShowCompletedDialog=True, it will show a dialog after the download process is completed.
  • SetCompletedUploadDialog (ShowCompletedDialog As Boolean, DialogText As String)
    If ShowCompletedDialog=True, it will show a dialog after the upload process is completed.
  • SetProcessCompleteOn (ProcessCompleteOn As Boolean)
    Use this function to determine by code when the Upload or Download is finished.
    The calling Activity must contain a sub named FTP_ProcessComplete. If your calling
    Activity includes this sub and you set this function to True, then the sub will
    be called as soon as the process has completed. EXAMPLE:

    'Add this sub to calling Activity
    Sub FTP_ProcessComplete
    'Your code here...
    End Sub
  • SetStealthOn (UseStealth As Boolean)
    If set to True, no progress box will be displayed during the file
    transfer. If False the progress dialog will show during the file
    transfers. The default is False.
  • SetStickyOn (MakeSticky As Boolean)
    If set to True, the progress box will stay on the screen until
    the user taps the Done button, otherwise the progress box will close
    as soon as the transfer is complete. The default is False.
  • SetText (HeaderDownLoadText As String, HeaderUploadText As String, TotalProgressText As String, FileProgressText As String, ButtonCancelText As String, ButtonDoneText As String)
    Used to set the Text of the Item's status display.
    NOTE: May be used for different language, etc.
  • SetTextSize (HeaderTextSize As Int, TotalProgressTextSize As Int, FileProgressTextSize As Int, CancelAndDoneTextSize As Int)
    Used to set the Text size of the Item's Text in the status dialog.
    NOTE: Passing 0 for any argument with leave that item unchanged
  • UpLoadFile (LocalPath As String, ServerPath As String, FileToSend As String)
    Uploads a single file passed in FileToSend

    Example: UpLoadFile("/mnt/sdcard/pictures", "uploads/pictures", "vacation.jpg")
  • UploadFileSet (ServerPath As String, Files_Path_And_Mask() As String, DeleteFileFromLocalDevice As Boolean)
    Retrieves a list of files from the local device. The Files_Path_And_Mask() array should contain the full
    path to the local devices files. It will then upload these files to the server.
    Files_Path_And_Mask() array can contain one entry or however many is needed.
    Example:

    UploadFileSet("uploads/pictures/", Array As String("/mnt/pictures/VA*.jpg", "/mnt/sdcard/backups/contact*.dat"), False)
  • WiFi_IsConnected As Boolean
    Check if Wifi is connected
    Returns True if connected otherwise returns False

Permissions:
◦android.permission.ACCESS_WIFI_STATE
◦android.permission.INTERNET
 

Attachments

  • Automated FTP Version 1.05.zip
    14.8 KB · Views: 987
  • Automated FTP Version 1.06.zip
    14.3 KB · Views: 1,624
  • FTP_Auto_Sample_Code_1.06.zip
    322.9 KB · Views: 1,784
Last edited:

margret

Well-Known Member
Licensed User
Longtime User
I think it should run on version 2.71. However, you will need to make sure you have the Network and Net libraries in your library folders. If both of these libs are not there it will not run. You do NOT need to select them in the LIBS tab, but they should be in one of your library folders that configure paths are pointing to. Also, a sample project is now attached to post one but it was written with B4A 3.2. It will not run on the older version but you can open it and see the code needed to use the library.
 

sultan87

Active Member
Licensed User
Longtime User
I think it should run on version 2.71. However, you will need to make sure you have the Network and Net libraries in your library folders. If both of these libs are not there it will not run. You do NOT need to select them in the LIBS tab, but they should be in one of your library folders that configure paths are pointing to. Also, a sample project is now attached to post one but it was written with B4A 3.2. It will not run on the older version but you can open it and see the code needed to use the library.
Hello,
thank you
I download and I try
Best regards
 

sultan87

Active Member
Licensed User
Longtime User
Hello,
thank you
I download and I try
Best regards
Hello,

with my version 2.71 , I have problems

Parsing code. 0.03
Compiling code. Error
Une exception de type 'System.OutOfMemoryException' a été levée.

it should upgrade to the latest version?

best regards
 

GMan

Well-Known Member
Licensed User
Longtime User
System.OutOfMemoryException
Regarding to the error message it seems that you have some memory problems...too much libs included ?
 

margret

Well-Known Member
Licensed User
Longtime User
Hello,

with my version 2.71 , I have problems

Parsing code. 0.03
Compiling code. Error
Une exception de type 'System.OutOfMemoryException' a été levée.

it should upgrade to the latest version?

best regards

If you are talking about the sample app, if you create a new project and then copy & paste the code to the new project it should then run other than the layout files. If you are saying the that error is from the use of the library in 2.71, I will need to check this. Which one are you talking about, the Sample or the Library?
 

sultan87

Active Member
Licensed User
Longtime User
If you are talking about the sample app, if you create a new project and then copy & paste the code to the new project it should then run other than the layout files. If you are saying the that error is from the use of the library in 2.71, I will need to check this. Which one are you talking about, the Sample or the Library?
Hello,
I have bd on a ftp and I have a copy of this bd local. I want to download only if the date of the maj bd on the ftp is greater than the date of my local db maj.

Maj_Bd_Locale = File.LastModified(MyPath & "Bridge/Bases de Donnees/","bridge_donnes.db")
Maj_Bd_Distante = ????

how?
 

Witold Giejsztowt

New Member
Licensed User
Longtime User
Hi new guy here,

I try to solve my problem of copying /not to big/ file from tablet to PC server using FTP_auto library.
I have to:

1 FTP.UpLoadFile to server
2 On FTP_ProcessComplete sub start FTP.DownLoadFile just uploaded file
3 Then on source tablet I am comparing file I send in step 1 to file I got in step 2 deleting source file from tablet if they are identical.
My problem is that step 1 is no problem, step 2 is no problem, but then the same FTP_ProcessComplete sub starts step 2 again and again...

My code is based on code from #53 post
How to prevent reinitialising FTP_ProcessComplet sub?
 
Last edited:

margret

Well-Known Member
Licensed User
Longtime User
You will need to set a flag variable for each process. Put the code needed for each inside the ProcessComplete Sub. Something like:

B4X:
Sub Globals
    'Set this string to Upload or Download before each operation. That way
    'FTP_ProcessComplete will know which block of code to run
    Dim FTP_Flag As String = ""
End Sub
Sub FTP_ProcessComplete
    If FTP_Flag = "Upload" Then        'Upload completed
        'Your code here
    End If
    If FTP_Flag = "Download" Then    'Download completed
        'Your code here
    End If
End Sub
 

sultan87

Active Member
Licensed User
Longtime User
I don't have any provision for this now. But if you can give me a few days, I will look into adding this feature.
Hello Margret
FTP.initialize shows the upload dialog box
how to not display it?
I want to show dialog boxes Download / Upload only when you execute FTP.Download gold FTP.Upload
best regards
 

sultan87

Active Member
Licensed User
Longtime User
I don't have any provision for this now. But if you can give me a few days, I will look into adding this feature.
Hello Margret
I always
when I run "ftp.download ", I get this message appears in the log "to sending the message waiting queue (ftp_listcompleted)."
App seems to be stopped
why?
best regards
 

sultan87

Active Member
Licensed User
Longtime User
Try to set the last parameter in the initialize command to True, or if it's true now, set it to False. You can SetStealthOn at the start and turn it off right before the upload or download.
Attached is a test
whatever combinations, the dialog is always displayed
why?

upload_2014-4-7_13-28-7.png


B4X:
Region Module Attributes
   #FullScreen: False
   #IncludeTitle: True
   #ApplicationLabel: Test FTP Auto
   #VersionCode: 1
   #VersionName:
   #SupportedOrientations: unspecified
   #CanInstallToExternalStorage: False
#End Region

'Activity module
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.

End Sub

Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.

   Dim FTP As FTP_Auto
'   FTP.Initialize(Activity, Me, "ftpperso.free.fr", "pmc.ftp", "soline", 21, True, False)
   
End Sub

Sub Activity_Create(FirstTime As Boolean)

'' essai 1
'   FTP.SetStealthOn(False)
'   FTP.Initialize(Activity, Me, "ftpperso.free.fr", "pmc.ftp", "xxxx", 21, False, False)

'' essai 2
'   FTP.SetStealthOn(False)
'   FTP.Initialize(Activity, Me, "ftpperso.free.fr", "pmc.ftp", "xxxx", 21, False, True)
'
'' essai 3
'   FTP.SetStealthOn(True)
'   FTP.Initialize(Activity, Me, "ftpperso.free.fr", "pmc.ftp", "xxxx", 21, False, False)
'
' essai 4
   FTP.SetStealthOn(True)
   FTP.Initialize(Activity, Me, "ftpperso.free.fr", "pmc.ftp", "xxxx", 21, False, True)

End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

best regards
 

sultan87

Active Member
Licensed User
Longtime User
You need to Initialize first and then SetStealthOn.
I tried as agreed, same problem
B4X:
Sub Activity_Create(FirstTime As Boolean)

'' essai 1
'   FTP.Initialize(Activity, Me, "ftpperso.free.fr", "pmc.ftp", "xxxx", 21, False, False)
'   FTP.SetStealthOn(False)

'' essai 2
'   FTP.Initialize(Activity, Me, "ftpperso.free.fr", "pmc.ftp", "xxxx", 21, False, True)
'   FTP.SetStealthOn(False)
'
'' essai 3
'   FTP.Initialize(Activity, Me, "ftpperso.free.fr", "pmc.ftp", "xxxx", 21, False, False)
'   FTP.SetStealthOn(True)
'
' essai 4
   FTP.Initialize(Activity, Me, "ftpperso.free.fr", "pmc.ftp", "xxxx", 21, False, True)
   FTP.SetStealthOn(True)

End Sub
 
Top