Contoh kode klien FTP (kode sumber C#): menghubungkan ke Server FTP DriveHQBanyak pengguna telah bertanya tentang cara terhubung ke server FTP DriveHQ dalam proyek perangkat lunak mereka sendiri. Dalam pesan ini, kami ingin memberikan beberapa informasi umum tentang FTP terlebih dahulu, diikuti dengan beberapa kode sumber C#.
DriveHQ menawarkan layanan hosting server FTP. Kami mendukung protokol FTP dan FTPS reguler. Salah satu keunggulan utama layanan FTP kami adalah: terintegrasi secara mulus dengan layanan IT cloud kami yang luas. Pengguna dapat mengakses file FTP mereka menggunakan browser web, drive yang dipetakan (WebDAV) atau perangkat lunak klien DriveHQ FileManager. Mereka juga dapat menggunakan alat Admin Grup berbasis web kami untuk membuat dan mengelola pengguna FTP (sub-pengguna).
Protokol FTP biasa dianggap tidak aman karena mengirimkan data tanpa enkripsi. Untuk keamanan SSL yang kuat, Anda dapat menggunakan FTPS (FTP melalui SSL/TLS). Ada dua metode untuk mengaktifkan keamanan SSL:
Implisit: Klien FTP terhubung langsung ke nomor port FTPS khusus (standarnya adalah 990);
Eksplisit (FTPES): Klien FTP terhubung ke port FTP reguler nomor 21, lalu mengeluarkan perintah STARTTLS untuk meningkatkan keamanan.
Server FTP DriveHQ mendukung FTPS dan FTPES. Sebagian besar aplikasi klien FTP mendukung FTPS dan FTPES, misalnya FileZilla, CuteFTP, WsFTP, SmartFTP, WinSCP, dan Fetch, dll.
Terdapat protokol transfer file aman lainnya bernama SFTP, yang seringkali disalahartikan dengan "Secure FTP"; padahal, SFTP berarti "SSH File Transfer Protocol", sebuah protokol transfer file yang sama sekali berbeda. Dari sudut pandang keamanan, SSL/TLS dan SSH hampir sama. Jelas SSL/TLS lebih populer daripada SSH. Server FTP DriveHQ tidak mendukung SFTP karena kami tidak melihat kebutuhan yang kuat untuk SFTP.
FTP Mode Aktif dan Pasif:
Koneksi FTP dapat mencakup dua koneksi TCP (saluran), yaitu saluran perintah dan saluran data. Saluran perintah digunakan untuk mengirim perintah FTP; saluran data digunakan untuk mentransfer data dalam jumlah besar. FTP Mode Aktif mengharuskan server FTP untuk terhubung kembali ke klien FTP untuk membangun koneksi data. Ini sering dianggap tidak aman dan diblokir oleh banyak firewall/router. FTP Mode Pasif mengharuskan klien FTP untuk terhubung ke server FTP pada nomor port yang berbeda. Ini dianggap aman dan jarang diblokir. Server FTP DriveHQ mendukung FTP Aktif dan Pasif. Namun, jika router/firewall atau perangkat lunak keamanan Anda memblokir FTP Aktif, maka FTP tersebut tidak akan berfungsi. Menarik untuk dicatat bahwa sebagian besar router baru mendukung FTP Aktif.
Harap dicatat: Klien FTP baris perintah Microsoft tidak mendukung FTP Pasif. Hampir semua program klien FTP lainnya mendukung FTP Aktif dan Pasif.
FTP dan ProFTP
DriveHQ memiliki dua situs FTP, satu adalah ftp.drivehq.com, yang dapat diakses oleh semua pengguna; yang lainnya adalah proftp.drivehq.com, yang hanya tersedia untuk anggota berbayar (termasuk sub-pengguna dari akun grup berbayar). Karena proftp.drivehq.com hanya tersedia untuk anggota berbayar, situs ini tidak mendukung FTP anonim. Untuk informasi lebih lanjut tentang layanan hosting server FTP kami, silakan kunjungi:
http://www.drivehq.com/servicemanual.aspx#_Toc265186728
Contoh Kode Sumber Klien FTP
Kode sumber C# berikut disediakan apa adanya tanpa dukungan apa pun. Anda bebas menggunakannya dalam perangkat lunak Anda sendiri, atau mendistribusikannya kembali. Kode contoh menunjukkan cara terhubung ke server FTP kami dan menjalankan perintah FTP, seperti LIST, GET, dan PUT; Anda juga dapat melihat cara mengaturnya untuk menggunakan FTP Pasif dan SSL.
menggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Text;
menggunakan System.Threading.Tasks;
menggunakan System.Net;
menggunakan System.IO;
menggunakan System.Security.Cryptography.X509Certificates;
///
/// Hak cipta (c) 2003-2016, Drive Headquarters, Inc.
///
/// Kode contoh klien FTP menunjukkan cara terhubung ke server FTP DriveHQ menggunakan C#.
/// Anda dapat menggunakan kode ini atau mendistribusikannya kembali secara gratis. Kode ini disediakan APA ADANYA tanpa
/// DriveHQ tidak akan menanggung tanggung jawab apa pun yang timbul dari penggunaan kode tersebut.
///
namespace FTPClientSample
{
Program kelas
{
string statis ftpServer = "ftp.drivehq.com"; // Anda juga dapat menggunakan proftp.drivehq.com jika Anda memiliki akun berbayar.
static string username = "YOUR_USERNAME"; // Nama pengguna DriveHQ Anda
static string password = "YOUR_PASSWORD"; // Kata sandi DriveHQ Anda
statis void Main(string[] args)
{
// Daftar folder di server FTP
//Daftar("/");
// Unduh file dari server FTP
//DownloadFile("ServerFileName.jpg", @"c:\temp\ClientFileName.jpg");
// Unggah file ke server FTP
UploadFile(@"c:\temp\ClientFileName.jpg", "/temp/ServerFileName.jpg");
}
///
/// Unggah file ke server FTP.
///
/// jalur di server FTP, misalnya /temp/filename
///
publik statis bool UploadFile(string srcFilePath, string destFilePath = null)
{
jika (String.IsNullOrWhiteSpace(srcFilePath))
lempar ArgumentNullException baru("Jalur File Sumber.");
jika (String.IsNullOrWhiteSpace(destFilePath))
destFilePath = Path.GetFileName(srcFilePath);
Uri serverUri = GetUri(destFilePath);
// serverUri harus diawali dengan skema ftp://.
jika (serverUri.Scheme != Uri.UriSchemeFtp)
kembalikan false;
FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.UploadFile);
// membaca isi file ke dalam larik byte
FileStream sourceStream = new FileStream(srcFilePath, FileMode.Open, FileAccess.Read);
byte[] fileContent = new byte[sourceStream.Length];
sourceStream.Read(fileContent, 0, fileContent.Length);
sourceStream.Tutup();
// Kirim isi file ke server FTP
request.ContentLength = fileContent.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContent, 0, fileContent.Length);
requestStream.Tutup();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Status respons: {0} - {1}", response.StatusCode, response.StatusDescription);
kembalikan nilai benar;
}
///
/// Unduh srcFilePath di server FTP ke destFilePath. Jika null, simpan ke folder saat ini.
///
///
publik statis bool DownloadFile(string srcFilePath, string destFilePath = null)
{
jika (String.IsNullOrWhiteSpace(srcFilePath))
lempar ArgumentNullException baru("Jalur File Sumber.");
jika (String.IsNullOrWhiteSpace(destFilePath))
destFilePath = Path.GetFileName(srcFilePath);
Uri serverUri = GetUri(srcFilePath);
//// serverUri harus diawali dengan skema ftp://.
jika (serverUri.Scheme != Uri.UriSchemeFtp)
kembalikan false;
FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.DownloadFile);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
FileStream fileStream = new FileStream(destFilePath, FileMode.OpenOrCreate, FileAccess.Write);
byte[] buffer = byte[32 * 1024] baru;
sementara (benar) {
int bytesRead = responseStream.Read(buffer, 0, buffer.Length);
jika (bytesRead == 0)
merusak;
fileStream.Write(buffer, 0, bytesRead);
}
fileStream.Tutup();
Console.WriteLine("Status respons: {0} - {1}", response.StatusCode, response.StatusDescription);
kembalikan nilai benar;
}
///
/// Daftar isi folder FTP
///
///
publik statis string Daftar(string path)
{
Uri serverUri = GetUri(path);
//// serverUri harus diawali dengan skema ftp://.
jika (serverUri.Scheme != Uri.UriSchemeFtp)
kembali "";
FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.ListDirectory);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string result = sr.ReadToEnd();
Console.WriteLine("Status respons: {0} - {1}", response.StatusCode, response.StatusDescription + "\r\n" + result);
kembalikan hasilnya;
}
private static FtpWebRequest CreateFtpRequest(Uri serverUri, string method)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
request.EnableSsl = true;
permintaan.GunakanPasif = benar;
permintaan.GunakanBiner = benar;
permintaan.KeepAlive = true;
request.Credentials = new NetworkCredential(username, password);
permintaan.Metode = metode;
permintaan pengembalian;
}
private static Uri GetUri(string remoteFilePath)
{
Uri ftpServerUri = new Uri("ftp://" + ftpServer);
kembalikan Uri baru (ftpServerUri, remoteFilePath);
}
}
}