File Transfer Protocol using C#

FTP merupakan salah satu protokol Internet yang paling awal dikembangkan, dan masih digunakan hingga saat ini untuk melakukan pen-download-an file dan peng-upload-an berkas-berkas komputer antara klien FTP dan server FTP. Sebuah Klien FTP merupakan aplikasi yang dapat mengeluarkan perintah-perintah FTP ke sebuah server FTP, sementara server FTP adalah sebuah Windows Service atau daemon yang berjalan di atas sebuah komputer yang merespons perintah-perintah dari sebuah klien FTP. Perintah-perintah FTP dapat digunakan untuk mengubah direktori, mengubah modus transfer antara biner dan ASCII, menggugah berkas komputer ke server FTP, serta mendownload berkas dari server FTP.

Dalam bab ini kita akan membahas bagaimana mengimplementasikan protokol FTP di dalam aplikasi dengan C#. Di .Net Framework versi 2 disediakan beberapa class yang mendukung implementasi FTP.

3.1 CLASS YANG TERLIBAT

System.Net.FtpWebRequest

Class ini mengimplementasikan File Transfer Protocol (FTP) client. Properti dan metode yang akan digunakan ditampilkan di tabel berikut ini.

Nama Property

Keterangan

Credentials

Mengambil atau menentukan nilai credentials yang digunakan untuk berkomunikasi dengan FTP server, berisi account name dan password.

Proxy

Mengambil atau menentukan nilai proxy yang digunakan untuk berkomunikasi dengan FTP server, nilai defaultnya adalah null.

UseBinary

Menentukan apakah data type yang digunakan dalam file transfer merupakan binary atau bukan.

UsePassive

Mengambil atau menentukan perilaku aplikasi klien dalam proses data transfer. Nilainya true bila klien yang memulai koneksi ke data port.

RenameTo

Mengambil atau menentukan nama baru file dari file yang akan dinamai kembali (rename).

Method

Mengambil atau menentukan perintah yang akan dikirim ke ftp server. Perintah yang bisa dikirim adalah:

DeleteFile

DownloadFile

GetDateTimestamp

GetFileSize

ListDirectory

ListDirectoryDetails

MakeDirectory

RemoveDirectory

Rename

UploadFile

Nama Metode

Keterangan

Create

Menginisialisasi obyek WebRequest dengan memberikan alamat url dari ftp server.

GetResponse

Mengembalikan respon dari ftp server

System.Net.FtpWebResponse

Class ini membungkus respon dari File Transfer Protocol (FTP) server. Properti dan metode yang akan digunakan ditampilkan di tabel berikut ini.

Nama Property

Keterangan

GetResponseStream

Mengambil stream yang berisi data respon yang dikirim dari ftp server

Close

Membebaskan resource yang dipegang oleh respon

3.2 MASALAH

Di pabrik makanan dimana Joseph bekerja ternyata tidak semua server memiliki sistem operasi yang sama. Beberapa server berjalan di sistem operasi Windows sementara beberapa lainnya berjalan di atas sistem operasi Unix. Ada keperluan untuk melakukan transfer dan manipulasi file ke server yang ber-sistem operasi Unix juga. Untuk itu dipilih menggunakan File Transfer Protocol sebagai sarana untuk bisa melakukan transfer dan manipulasi file di server berbasis Unix tersebut.

Staf IT Joseph kembali ditugaskan untuk membangun aplikasi untuk melakukan transfer file resep yang sebelumnya sudah dia buat untuk hubungan antara komputer klien dan server yang berbasis sistem operasi Windows untuk bisa juga melakukan transfer file dan manipulasi file ke server berbasis Unix.

3.3 DISAIN

Kita menggunakan use case yang sama dengan bab pertama yaitu Use Case Download File Resep, dengan melakukan beberapa modifikasi pada saat implementasi yang disesuaikan dengan teknologi yang digunakan.

Use Case Mendownload File Resep

  1. Nama Use Case:

Download File Resep

  1. Deskripsi Singkat:

Use case ini menerangkan mekanisme pengambilan file resep yang disimpan di server resep dari mesin yang akan memproses suatu produk.

  1. Basic Flow:

a. Operator membuka aplikasi download resep

b. Operator mengisikan nama resep yang akan diambil

c. Operator mengkonfirmasikan pengambilan file dengan menekan tombol download.

d. Sistem mencari nama file yang dimaksud di folder tujuan yang ada di server resep.

e. Setelah ditemukan sistem mengirimkan file tersebut ke komputer mesin yang meminta, dan ditaruh di folder yang sudah ditentukan.

f. Sistem memberi informasi bila proses download sudah berhasil dan selesai.

  1. Alternate Flow:

a. Bila nama file yang dimaksud tidak ada di folder tujuan yang ada di server resep maka sistem memberi informasi bahwa file tidak bisa ditemukan. Meminta kepada operator untuk mengecek apakah nama resep yang diisikan ada kesalahan ketik atau memang filenya belum dibuat oleh bagian resep.

b. Bila proses pengiriman file ke komputer mesin tidak berhasil karena berbagai hal maka sistem memberi informasi bahwa proses pengiriman gagal karena sesuatu sebab.

  1. Special Requirement:

Operating sistem yang digunakan oleh server adalah berbasis Unix.

  1. Pre-Condition:
  2. Post-Condition:

3.4 IMPLEMENTASI

Mempersiapkan FTP Class

Untuk keperluan FTP kita buat satu class khusus bernama FTP yang berisi prosedur method yang bisa dikirim ke ftp server. Dari Solution Explorer klik kanan nama project dan pilih Add lalu pilih New Item, dan dari koleksi templates pilih Class, namakan class tersebut FTP maka akan dihasilkan FTP.cs.

Di referensi class FTP ini pastikan ada referensi ke class berikut:

using System.IO;

using System.Net;

using System.Text;

lalu kita buat masing-masing prosedur method seperti di sub bagian di bawah ini.

List Directory

Kita namakan method untuk melist file yang ada dalam suatu direktori di server tujuan dengan ftpGetFileName. Method ini memerlukan input berupa informasi nama folder yang ingin kita lihat isinya yang ada di server tujuan (srcFolder), nama dan password (ftpUserName, ftpPassword) yang bisa digunakan untuk mengakses server tujuan secara ftp yang diberikan oleh administrator server tersebut. Kita set method ini sebagai static dengan tujuan agar bisa diakses tanpa perlu membuat instance dari class tersebut terlebih dahulu.

public static string ftpGetFileName(string srcFolder,

string ftpUserName, string ftpPassword)

Kita gunakan class FtpWebRequest yang merupakan subclass dari System.Net yang mengimplementasikan klien FTP. Inisialisasi dilakukan dengan menggunakan method Create, lalu kita masukkan informasi url dan credential yang diperlukan untuk mengakses ftp server tujuan. Berikut kode inisialisasinya:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFolder);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

Setelah inisialisasi koneksi, kita sudah bisa mengirimkan method yang akan kita eksekusi, kita gunakan method Method dan kita pilih method dari koleksi WebRequestMethods.Ftp

webRequestMethod

webRequestMethod

Untuk melihat isi folder kita pilih method ListDirectory.

request.Method = WebRequestMethods.Ftp.ListDirectory;

SeteUntuk menampung respon dari server kita gunakan class FtpWebResponse.

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Response ini yang kemudian kita olah untuk bisa mendapatkan nama file yang terdapat dalam folder tersebut.

Stream responseStream = null;

responseStream = response.GetResponseStream();

Kode selengkapnya untuk melihat daftar file yang ada dalam suatu folder terlampir di bawah ini:

public static string ftpGetFileName(string srcFolder,

string ftpUserName, string ftpPassword)

{

string fileName = null;

try

{

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFolder);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

request.Method = WebRequestMethods.Ftp.ListDirectory;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Stream responseStream = null;

StreamReader readStream = null;

responseStream = response.GetResponseStream();

readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8);

if (readStream != null)

{

fileName = readStream.ReadToEnd();

}

if (readStream != null)

{

readStream.Close();

}

if (response != null)

{

response.Close();

}

}

catch (Exception exc)

{

throw;

}

return fileName;

}

Download File

Kita namakan method untuk mengambil suatu file dari server ftp dan menaruhnya di komputer klien dengan ftpDownload. Method ini memerlukan input berupa informasi nama path file yang akan diambil (berarti nama lengkap berisi url ftp server, nama folder, dan nama file beserta ekstensinya) yang ada di server ftp (srcFilePath), nama dan password (ftpUserName, ftpPassword) yang bisa digunakan untuk mengakses server tujuan secara ftp yang diberikan oleh administrator server tersebut, dan nama path file dimana file yang diambil itu akan diletakkan di komputer klien (targetFilePath). Kita set method ini sebagai static dengan tujuan agar bisa diakses tanpa perlu membuat instance dari class tersebut terlebih dahulu.

public static void ftpDownload(string srcFilePath,

string ftpUserName, string ftpPassword, string targetFilePath)

Kita gunakan class FtpWebRequest yang merupakan subclass dari System.Net yang mengimplementasikan klien FTP. Inisialisasi dilakukan dengan menggunakan method Create, lalu kita masukkan informasi url dan credential yang diperlukan untuk mengakses ftp server tujuan. Berikut kode inisialisasinya:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFilePath);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

Setelah inisialisasi koneksi, kita sudah bisa mengirimkan method yang akan kita eksekusi, kita gunakan method Method dan kita pilih method dari koleksi WebRequestMethods.Ftp yaitu method DownloadFile

request.Method = WebRequestMethods.Ftp.DownloadFile;

Untuk menampung respon dari server kita gunakan class FtpWebResponse.

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Response ini yang kemudian kita baca file tersebut dan kemudian kita tuliskan kembali ke dalam file yang kita buat berdasarkan input dari targetFilePath dengan menggunakan class BinaryReader dan BinaryWriter.

using (BinaryReader reader = new BinaryReader(response.GetResponseStream()))

using (BinaryWriter writer = new BinaryWriter(File.Open(targetFilePath, FileMode.Create)))

{

byte[] buffer = new byte[2048];

int count = reader.Read(buffer, 0, buffer.Length);

while (count != 0)

{

writer.Write(buffer, 0, count);

count = reader.Read(buffer, 0, buffer.Length);

}

}

Kode selengkapnya untuk melihat daftar file yang ada dalam suatu folder terlampir di bawah ini:

public static void ftpDownload(string srcFilePath,

string ftpUserName, string ftpPassword, string targetFilePath)

{

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFilePath);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

request.Method = WebRequestMethods.Ftp.DownloadFile;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

using (BinaryReader reader = new BinaryReader(response.GetResponseStream()))

using (BinaryWriter writer = new BinaryWriter(File.Open(targetFilePath, FileMode.Create)))

{

byte[] buffer = new byte[2048];

int count = reader.Read(buffer, 0, buffer.Length);

while (count != 0)

{

writer.Write(buffer, 0, count);

count = reader.Read(buffer, 0, buffer.Length);

}

}

response.Close();

}

Upload File

Kita namakan method untuk mengirimkan suatu file dari komputer klien dan menaruhnya di server ftp dengan ftpUpload. Method ini memerlukan input berupa informasi nama path file tujuan (berarti nama lengkap berisi url ftp server, nama folder, dan nama file beserta ekstensinya) di server ftp (srcFilePath), nama dan password (ftpUserName, ftpPassword) yang bisa digunakan untuk mengakses server tujuan secara ftp yang diberikan oleh administrator server tersebut, dan nama path file untuk file yang ada di komputer klien (targetFilePath). Kita set method ini sebagai static dengan tujuan agar bisa diakses tanpa perlu membuat instance dari class tersebut terlebih dahulu.

public static void ftpUpload(string srcFilePath,

string ftpUserName, string ftpPassword, string targetFilePath)

Kita gunakan class FtpWebRequest yang merupakan subclass dari System.Net yang mengimplementasikan klien FTP. Inisialisasi dilakukan dengan menggunakan method Create, lalu kita masukkan informasi url dan credential yang diperlukan untuk mengakses ftp server tujuan. Berikut kode inisialisasinya:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFilePath);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

Setelah inisialisasi koneksi, kita sudah bisa mengirimkan method yang akan kita eksekusi, kita gunakan method Method dan kita pilih method dari koleksi WebRequestMethods.Ftp yaitu method UploadFile

request.Method = WebRequestMethods.Ftp.UploadFile;

Kita perlu merubah file yang akan dikirim ke dalam bentuk stream, yang dilakukan adalah membaca isi file tersebut kemudian menuliskannya ke dalam bentuk stream.

StreamReader sourceStream = new StreamReader(targetFilePath);

byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());

sourceStream.Close();

request.ContentLength = fileContents.Length;

Stream requestStream = request.GetRequestStream();

requestStream.Write(fileContents, 0, fileContents.Length);

requestStream.Close();

Untuk menampung respon dari server kita gunakan class FtpWebResponse.

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Kode selengkapnya untuk melihat daftar file yang ada dalam suatu folder terlampir di bawah ini:

public static void ftpUpload(string srcFilePath,

string ftpUserName, string ftpPassword, string targetFilePath)

{

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFilePath);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

request.Method = WebRequestMethods.Ftp.UploadFile;

StreamReader sourceStream = new StreamReader(targetFilePath);

byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());

sourceStream.Close();

request.ContentLength = fileContents.Length;

Stream requestStream = request.GetRequestStream();

requestStream.Write(fileContents, 0, fileContents.Length);

requestStream.Close();

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

response.Close();

}

Delete File

Kita namakan method untuk menghapus file yang ada dalam suatu direktori di server ftp tujuan dengan ftpDeleteFile. Method ini memerlukan input berupa informasi nama lengkap file (berarti nama lengkap berisi url ftp server, nama folder, dan nama file beserta ekstensinya) yang ingin kita hapus yang ada di server tujuan (srcFilePath), nama dan password (ftpUserName, ftpPassword) yang bisa digunakan untuk mengakses server tujuan secara ftp yang diberikan oleh administrator server tersebut. Kita set method ini sebagai static dengan tujuan agar bisa diakses tanpa perlu membuat instance dari class tersebut terlebih dahulu.

public static void ftpDeleteFile(string srcFilePath,

string ftpUserName, string ftpPassword)

Kita gunakan class FtpWebRequest yang merupakan subclass dari System.Net yang mengimplementasikan klien FTP. Inisialisasi dilakukan dengan menggunakan method Create, lalu kita masukkan informasi url dan credential yang diperlukan untuk mengakses ftp server tujuan. Berikut kode inisialisasinya:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFilePath);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

Setelah inisialisasi koneksi, kita sudah bisa mengirimkan method yang akan kita eksekusi, kita gunakan method Method dan kita pilih method dari koleksi WebRequestMethods.Ftp yaitu method DeleteFile.

request.Method = WebRequestMethods.Ftp.DeleteFile;

Untuk menampung respon dari server kita gunakan class FtpWebResponse.

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Kode selengkapnya untuk melihat daftar file yang ada dalam suatu folder terlampir di bawah ini:

public static void ftpDeleteFile(string srcFilePath,

string ftpUserName, string ftpPassword)

{

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFilePath);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

request.Method = WebRequestMethods.Ftp.DeleteFile;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

response.Close();

}

Make Directory

Kita namakan method untuk membuat direktori baru di server ftp tujuan dengan ftpMakeDirectory. Method ini memerlukan input berupa informasi nama folder (berisi url ftp server dan nama folder) yang ingin kita buat di server tujuan (srcFolder), nama dan password (ftpUserName, ftpPassword) yang bisa digunakan untuk mengakses server tujuan secara ftp yang diberikan oleh administrator server tersebut. Kita set method ini sebagai static dengan tujuan agar bisa diakses tanpa perlu membuat instance dari class tersebut terlebih dahulu.

public static void ftpMakeDirectory(string srcFolder,

string ftpUserName, string ftpPassword)

Kita gunakan class FtpWebRequest yang merupakan subclass dari System.Net yang mengimplementasikan klien FTP. Inisialisasi dilakukan dengan menggunakan method Create, lalu kita masukkan informasi url dan credential yang diperlukan untuk mengakses ftp server tujuan. Berikut kode inisialisasinya:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFolder);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

Setelah inisialisasi koneksi, kita sudah bisa mengirimkan method yang akan kita eksekusi, kita gunakan method Method dan kita pilih method dari koleksi WebRequestMethods.Ftp yaitu method MakeDirectory.

request.Method = WebRequestMethods.Ftp.MakeDirectory;

Untuk menampung respon dari server kita gunakan class FtpWebResponse.

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Kode selengkapnya untuk melihat daftar file yang ada dalam suatu folder terlampir di bawah ini:

public static void ftpMakeDirectory(string srcFolder,

string ftpUserName, string ftpPassword)

{

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFolder);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

request.Method = WebRequestMethods.Ftp.MakeDirectory;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

response.Close();

}

Rename Directory

Kita namakan method untuk mengganti nama direktori yang sudah ada di server ftp tujuan dengan ftpMakeDirectory. Method ini memerlukan input berupa informasi nama folder (berisi url ftp server dan nama folder) yang ingin kita buat di server tujuan (srcFolder), nama dan password (ftpUserName, ftpPassword) yang bisa digunakan untuk mengakses server tujuan secara ftp yang diberikan oleh administrator server tersebut, dan nama folder pengganti yang akan digunakan (targetFolder). Kita set method ini sebagai static dengan tujuan agar bisa diakses tanpa perlu membuat instance dari class tersebut terlebih dahulu.

public static void ftpRenameFolder(string srcFolder,

string ftpUserName, string ftpPassword, string targetFolder)

Kita gunakan class FtpWebRequest yang merupakan subclass dari System.Net yang mengimplementasikan klien FTP. Inisialisasi dilakukan dengan menggunakan method Create, lalu kita masukkan informasi url dan credential yang diperlukan untuk mengakses ftp server tujuan. Lihat untuk rename ini ada tambahan properti RenameTo yang berisi informasi ke nama apa folder akan diganti. Berikut kode inisialisasinya:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFolder);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

request.RenameTo = targetFolder;

Setelah inisialisasi koneksi, kita sudah bisa mengirimkan method yang akan kita eksekusi, kita gunakan method Method dan kita pilih method dari koleksi WebRequestMethods.Ftp yaitu method Rename.

request.Method = WebRequestMethods.Ftp.Rename;

Untuk menampung respon dari server kita gunakan class FtpWebResponse.

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Kode selengkapnya untuk melihat daftar file yang ada dalam suatu folder terlampir di bawah ini:

public static void ftpRenameFolder(string srcFolder,

string ftpUserName, string ftpPassword, string targetFolder)

{

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFolder);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

request.RenameTo = targetFolder;

request.Method = WebRequestMethods.Ftp.Rename;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

response.Close();

}

Delete Directory

Kita namakan method untuk menghapus direktori yang sudah ada di server ftp tujuan dengan ftpDeleteFolder. Method ini memerlukan input berupa informasi nama folder (berisi url ftp server dan nama folder) yang ingin kita hapus dari server tujuan (srcFolder), nama dan password (ftpUserName, ftpPassword) yang bisa digunakan untuk mengakses server tujuan secara ftp yang diberikan oleh administrator server tersebut. Kita set method ini sebagai static dengan tujuan agar bisa diakses tanpa perlu membuat instance dari class tersebut terlebih dahulu.

public static void ftpDeleteFolder(string srcFolder,

string ftpUserName, string ftpPassword)

Kita gunakan class FtpWebRequest yang merupakan subclass dari System.Net yang mengimplementasikan klien FTP. Inisialisasi dilakukan dengan menggunakan method Create, lalu kita masukkan informasi url dan credential yang diperlukan untuk mengakses ftp server tujuan. Berikut kode inisialisasinya:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFolder);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

Setelah inisialisasi koneksi, kita sudah bisa mengirimkan method yang akan kita eksekusi, kita gunakan method Method dan kita pilih method dari koleksi WebRequestMethods.Ftp yaitu method RemoveDirectory.

request.Method = WebRequestMethods.Ftp.RemoveDirectory;

Untuk menampung respon dari server kita gunakan class FtpWebResponse.

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Kode selengkapnya untuk melihat daftar file yang ada dalam suatu folder terlampir di bawah ini:

public static void ftpDeleteFolder(string srcFolder,

string ftpUserName, string ftpPassword)

{

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(srcFolder);

request.Credentials = new NetworkCredential(

ftpUserName, ftpPassword);

request.Proxy = null;

request.UseBinary = false;

request.UsePassive = true;

request.Method = WebRequestMethods.Ftp.RemoveDirectory;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

response.Close();

}

Menguji FTP Class

Setelah class FTP selesai dibuat, sebagai pengujian kita buat satu form yang kita isi dengan label, textbox dan button seperti gambar di bawah ini.

Satu bagian kita gunakan untuk memasukkan konfigurasi ftp dari server tujuan, yang terdiri dari ftp server ip, ftp user name dan ftp password. Isikan ftp server dengan alamat ip server tujuan, isikan ftp user name dan ftp password dengan user name dan password yang diberikan oleh administrator server untuk bisa mengakses ftp server tujuan.

form untuk mencoba FTP

form untuk mencoba FTP

Bagian kedua kita gunakan untuk menguji pembuatan direktori di server tujuan, isikan form dengan control seperti ini, dan isikan directory name dengan nama folder yang akan dibuat di server tujuan. Pada contoh ini di server tujuan pada saat kita mengkoneksikan diri dengan server tujuan maka kita langsung ditujukan ke folder customers, dan untuk pengujian ini kita mencoba untuk membuat folder starLight sebagai subfolder dari folder customers.

Klik ganda di tombol Create Directory dan isikan kode berikut di dalamnya:

private void btnCreateDir_Click(object sender, EventArgs e)

{

try

{

FTP.ftpMakeDirectory(txtServer.Text + txtCreateDir.Text,

txtUserName.Text, txtPassword.Text);

MessageBox.Show(“Folder: “ + txtCreateDir.Text +

” is created.”);

}

catch (Exception exc)

{

MessageBox.Show(“ERROR: “ + exc.Message);

}

}

Kode program di atas langsung memanggil class FTP dan mengeksekusi metode ftpMakeDirectory dengan mengambil input variabel dari gabungan nilai textbox url server dan textbox nama direktori, textbox nama user dan textbox password. Setelah itu ditampilkan message box baik untuk transaksi yang sukses maupun transaksi yang gagal.

Bagian ketiga kita gunakan untuk menguji pengiriman file dari komputer klien ke server tujuan. Di komputer klien kita buat satu file text menggunakan notepad namakan file tersebut log2.txt dan kita simpan di direktori root C dari komputer klien tersebut. Kita akan mencoba untuk mengupload atau mengirimkan file log2.txt ini ke server tujuan yaitu untuk ditaruh di folder customers/starLight (folder yang kita buat di bagian kedua) dengan nama file menjadi log.txt.

Klik ganda di tombol Upload File dan isikan kode berikut di dalamnya:

private void btnUpload_Click(object sender, EventArgs e)

{

try

{

FTP.ftpUpload(txtServer.Text + txtTargetFile.Text,

txtUserName.Text, txtPassword.Text,

txtSourceFile.Text);

MessageBox.Show(“File: “ + txtSourceFile.Text +

” is uploaded to server.”);

}

catch (Exception exc)

{

MessageBox.Show(“ERROR: “ + exc.Message + exc.StackTrace);

}

}

Sama dengan sebelumnya kode program di atas juga langsung memanggil class FTP dan mengeksekusi metode ftpUpload dengan mengambil input variabel dari gabungan nilai textbox url server dan textbox nama direktori plus nama file lengkapnya, textbox nama user dan textbox password. Setelah itu ditampilkan message box baik untuk transaksi yang sukses maupun transaksi yang gagal.

Bagian keempat kita gunakan untuk bisa me-list isi suatu folder. Untuk pengujian ini kita akan melihat isi dari folder customers/starLight sekaligus untuk mengecek apakah proses penguploadan file di bagian ketiga berhasil atau tidak. Kita tambahkan dua control textbox yang pertama untuk memasukkan input folder name yang akan kita lihat isinya dan textbox yang kedua untuk melihat output yang dihasilkan yaitu nama file yang ada di dalam folder yang ingin kita lihat. Set properti dari textbox kedua ini sebagai multiline.

Klik ganda di tombol List Directory dan isikan kode berikut di dalamnya:

private void btnListDir_Click(object sender, EventArgs e)

{

try

{

txtFileList.Text = FTP.ftpGetFileName(txtServer.Text + txtDirName.Text,

txtUserName.Text, txtPassword.Text);

}

catch (Exception exc)

{

MessageBox.Show(“ERROR: “ + exc.Message);

}

}

Kode program di atas langsung memanggil class FTP dan mengeksekusi metode ftpGetFileName dengan mengambil input variabel dari gabungan nilai textbox url server dan textbox nama direktori, textbox nama user dan textbox password. Setelah itu bila ada file di dalam folder tersebut maka akan ditampilkan di textbox txtFile List, dan bila tidak ada maka ditampilkan message box.

Bila kita eksekusi program di atas dengan menekan tombol F5 maka akan dihasilkan sebagai berikut:

Kita coba membuat directory bernama starLight, maka kita klik tombol Create Directory maka akan direspon dengan message box berikut:

Coba anda cek ke server maka di bawah folder customers akan muncul folder baru bernama starLight.

Kemudian kita coba untuk mengirim satu file di komputer lokal kita. Kita buat satu file text. Buka aplikasi notepad kemudian tuliskan “file untuk diupload ke server ftp.”, save file tersebut ke direktory C: dan beri nama log2.txt.

Kita klik tombol Upload File, maka akan ditampilkan respon berupa message box seperti di bawah ini.

Coba anda cek di server tujuan di folder starLight, maka akan ada file baru bernama log.txt, untuk lebih meyakinkan bahwa file tersebut adalah berasal dari file log2.txt bisa dibuka filenya dan dilihat isi filenya apakah isinya sama dengan “file untuk diupload ke server ftp.” atau tidak.

Selanjutnya kita coba untuk melihat apakah metode untuk melihat file ada dalam direktori bekerja dengan baik atau tidak, kita klik tombol List Directory, dan di text box akan ditampilkan nama file seperti di bawah ini.

Dengan hasil pengujian seperti ini bisa kita pastikan bahwa class FTP yang kita buat sudah bekerja sesuai dengan yang diharapkan, sekarang kita melangkah untuk membuat implementasi Download File Resep menggunakan class FTP ini.

Implementasi Use Case Download File Resep

Kita copikan file frmDownload.cs, dan ganti nama hasil kopiannya dengan frmDownloadFTP.cs. Kita perlu menambahkan 3 buah label dan textbox untuk digunakan menyimpan informasi ftp server url, ftp user name dan ftp password, lengkapnya seperti di bawah ini.

form download recipe

form download recipe

Klik ganda tombol download.

Kita akan merubah bagian kode yang awalnya menggunakan class file dan direktori dengan class FTP. Bagian itu ada di prosedur btnDownload_Click. Di dalam kurung Try {} kita hapus bagian ini:

if (File.Exists(pathServerResep + txtResep.Text + “.txt”))

{

File.Copy(pathServerResep + txtResep.Text + “.txt”, pathLocalResep + txtResep.Text + “.txt”);

MessageBox.Show(“File berhasil didownload !”);

}

Dan kita gantikan dengan kode yang hampir sama, yaitu kode untuk mengecek apakah file yang dimaksud ada di server atau tidak. Pengecekan dilakukan dengan mengambil daftar file yang ada di folder tujuan dan kemudian dilakukan pengujian apakah string yang didapat berisi nama file yang dimaksud atau tidak. Berikut kodenya:

string fileName = FTP.ftpGetFileName(txtServer.Text + pathServerResep,

txtUserName.Text, txtPassword.Text);

bool isExist = fileName.Contains(txtResep.Text + “.txt”);

Kemudian bila didapat bahwa file tersedia di server maka dilanjutkan dengan proses download ke komputer lokal.

if (isExist == true)

{

FTP.ftpDownload(txtServer.Text + pathServerResep + txtResep.Text + “.txt”,

txtUserName.Text,

txtPassword.Text,

pathLocalResep + txtResep.Text + “.txt”);

}

Berikut kode lengkapnya:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace winAplikasiResep

{

public partial class frmDownloadFTP : Form

{

private string pathServerResep = “customers/starLight/”;

private string pathLocalResep = @”C:\MyResep\”;

public frmDownloadFTP()

{

InitializeComponent();

}

private void btnDownload_Click(object sender, EventArgs e)

{

try

{

string fileName = FTP.ftpGetFileName(txtServer.Text + pathServerResep,

txtUserName.Text, txtPassword.Text);

bool isExist = fileName.Contains(txtResep.Text + “.txt”);

if (isExist == true)

{

FTP.ftpDownload(txtServer.Text + pathServerResep + txtResep.Text + “.txt”,

txtUserName.Text,

txtPassword.Text,

pathLocalResep + txtResep.Text + “.txt”);

MessageBox.Show(“File berhasil didownload !”);

}

else

{

MessageBox.Show(“File tidak ada di Server Resep !”);

}

}

catch (Exception exc)

{

MessageBox.Show(“Terjadi Error: “ + exc.Message);

}

}

}

}

Kita eksekusi dengan menekan tombol F5, hasilnya akan ditampilkan seperti di bawah ini. Isi nama resep denga rotikeju, dan tekan tombol download.

File berhasil didownload ditandai dengan munculnya message box bertuliskan File berhasil didownload.

(Julius Hermawan – 2008

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s