Read this article in your language IT | EN | DE | ES
Someone recently mentioned they need to do some FTP stuff in their application, send up files and such to a remote server. Well, low and behold, I’ve already done that task before. So I thought I’d provide them some code to use.
It’s actually pretty easy, you just have to setup some Constents and then you could basically copy and paste my methods.
In this example I’m uploading a specific filename. Wouldn’t take much to modify to upload multiple’s.
Private _ServerFriendlyName As String = ConfigurationManager.AppSettings("FTPServerFriendlyName") '"Production Box Alpha"
Private _ServerAddressURI As String = "ftp://" & ConfigurationManager.AppSettings("FTPServerIP") ' 172.1.1.20"
Private _ServerPath As String = "" '"/Logs"
Private _FTPUserName As String = ConfigurationManager.AppSettings("FTPUserName") '"ftpsusername"
Private _FTPPassword As String = ConfigurationManager.AppSettings("FTPPassword") ' "ftppass"
Private _FileToUploadFileName As String = "FileToUpload.txt"
Let’s go over the variables I have here.
_ServerFriendlyName – Just a var I use to show what server you are going too
_ServerAddressURI – this is the FTP address, feel free to use IP for FDQN
_ServerPath – this is where on the server I will dump my files into, in this case the user/pass already go into the /logs folder so this var is blank
_FTPUsername – obvious
_FTPPassword – obvious
_FTPToUploadFileName – this is the file I am planning to upload and download
On my page_load I am calling a DownloadFile function to get the file.
DownloadFile("/Logs/" & _FileToUploadFileName)
And here is the first copy function, the Download Method
Private Sub DownloadFile(ByVal FTPPath As String)
Try
Dim ListRequest As FtpWebRequest = WebRequest.Create(_ServerAddressURI & FTPPath)
Dim Crendentials As New NetworkCredential(_FTPUserName, _FTPPassword)
ListRequest.Credentials = Crendentials
ListRequest.Method = WebRequestMethods.Ftp.DownloadFile
Dim FTPResp As FtpWebResponse = ListRequest.GetResponse
Dim FTPRespStream As Stream = FTPResp.GetResponseStream
Dim Reader As New StreamReader(FTPRespStream, System.Text.Encoding.UTF8)
Dim FileName = FTPPath.Substring(InStrRev(FTPPath, "/"))
Dim FileLocation As String = HttpContext.Current.Request.MapPath("~/Logs/" & FileName)
Dim DownloadedFile As New FileStream(FileLocation, FileMode.Create)
Dim oWriteFile As New StreamWriter(DownloadedFile)
oWriteFile.Write(Reader.ReadToEnd)
FTPResp.Close()
oWriteFile.Close()
DownloadedFile.Close()
Catch ex As Exception
'Place your Error Handling Here
End Try
End Sub
Afterwards, the user can modify the file as needed and then I upload it back when they are done. Notice I have on line 5, the MapPath(“~/Logs"/”…. that is the local path on the web server. This should probably also be set at the top of my app and yours. You send in the path you want to upload too
UploadFile("/Logs/" & _FTPToUploadFileName)
Private Sub UploadFile(ByVal FTPPath As String)
Try
Dim FileName As String = _ServerAddressURI & FTPPath
Dim FileLocation As String = ""
FileLocation = HttpContext.Current.Request.MapPath("~/Logs/" & _FTPToUploadFileName)
Dim Client As New WebClient
Client.Credentials = New NetworkCredential(_FTPUserName, _FTPPassword)
Client.UploadFile(FileName, FileLocation)
Catch ex As Exception
'Put your Error Handling Here
End Try
End Sub
Yes there are tweaks and that can be made, but you have enough to basically copy/paste and get a huge jump start. You could also stream the file in from memory.
What was that? You want this code in c#? Well here you go, convert it :)
507a8be8-fd51-439c-988f-ec07d79a4503|2|5.0
VB.NET, Programming, Code Snippets
vb.net, programming, code snippets, ftp, ftp .net