December 01, 2011

Upload File With FTP

สำหรับบทความนี้จะพูดถึงเกี่ยวกับการ upload file ไปที่ Server ผ่านทางระบบ FTP อาจมีหลายคนสงสัยว่าเจ้า FTP นี่มันคืออะไร งั้นเราลองมาทำความรู้จักกับ FTP กันก่อนละกัน

FTP หรือ File Transfer Protocol เป็น Protocol มาตรฐานในเครือข่ายชนิดหนึ่ง ใช้สำหรับแลกเปลี่ยนไฟล์ระหว่างคอมพิวเตอร์และจัดการไฟล์บนเครือข่าย TCP/IP ซึ่ง FTP นี้ใช้ในการส่งไฟล์หรือเว็บเพจจากแหล่งที่เก็บไฟล์ข้อมูลหรือเครื่องคอมพิวเตอร์ที่เก็บไฟล์ (Client) ไปยังเครื่องคอมพิวเตอร์แม่ข่าย (Server) หรืออาจจะใช้ FTP ในการดาวน์โหลดโปรแกรมและไฟล์จากเครื่องแม่ข่ายมายังเครื่องคอมพิวเตอร์
คนที่ทำเว็บไซต์หรือคนที่จะฝากไฟล์ จะใช้ FTP ในการปรับปรุงไฟล์บนเครื่อง Server โดยต้องล็อคอินไปที่ FTP server ก่อนแล้วทำการอัพโหลดไฟล์ที่ต้องการแก้ไขผ่านโปรแกรม FTP ขึ้นไปยัง Server โดยโปรแกรม FTP ที่ใช้ในการ Download หรือ Upload ก็มีให้เลือกใช้เยอะ FTP สามารถแบ่งได้สองแบบคือ
1. FTP server – เป็นโปรแกรมที่ถูกติดตั้งไว้ที่เครื่องเซิร์ฟเวอร์ ทำหน้าที่ให้บริการ ftp หากมีการเชื่อมต่อจาก Client เข้าไป
2. FTP client – เป็นโปรแกรม ftp ที่ถูกติดตั้งในเครื่องคอมพิวเตอร์ของ user ทั่วๆไป ทำหน้าที่เชื่อมต่อไปยัง FTP server และทำการอัพโหลด ดาวน์โหลดไฟล์ หรือ จะสั่งแก้ไขชื่อไฟล์ ลบไฟล์ เคลื่อนย้ายไฟล์ก็ได้เช่นกัน

โปรแกรม FTP ก็มีมากมายทั้งแบบฟรี และแบบเสียเงินซื้อ เช่น FileZilla ซึ่งโปรแกรม FileZilla นี้สามารถใช้งานได้ฟรี และมีการปรับเปลี่ยนรุ่นใหม่อยู่เสมอๆ หรือจะเป็น SmartFTP, Cuteftp จะเป็นโปรแกรม FTP ที่ต้องเสียเงินซื้อ
(อ้างอิงข้อมูลจาก http://www.sadung.com/?p=5319)

คราวนี้ เราจะลองมาเขียนโปรแกรมที่ช่วยในการอัพโหลดไฟล์ไปเก็บไว้บนเซิร์ฟเวอร์ด้วยภาษา C# กัน


ก่อนอื่นเราจำเป็นต้องสมัครขอใช้บริการ Server หรือ Web Hosting ที่สนับสนุนระบบ FTP ซะก่อน ซึ่งก็มีอยู่มากมายที่ให้บริการฟรี เช่น www.000webhost.comwww.awardspace.com เป็นต้น
จากนั้นก็เขียนโค้ดดังต่อไปนี้

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;  //<-- required for ftp
using System.IO;   //<-- required for ftp
using System.Threading; //<-- required for thread
namespace UploadFTP
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    public string ftpHostName;
    public string ftpUserID;
    public string ftpPassword;

    public void ftpfile(string ftpfilepath, string inputfilepath)
    {
      try
      {
        string ftpfullpath = ftpHostName + ftpfilepath;
              
        FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
        ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

        ftp.KeepAlive = true;
        ftp.UseBinary = true;
        ftp.Method = WebRequestMethods.Ftp.UploadFile;
                
        FileStream fs = File.OpenRead(inputfilepath);
        byte[] buffer = new byte[fs.Length];
        fs.Read(buffer, 0, buffer.Length);
        fs.Close();

        Stream ftpstream = ftp.GetRequestStream();
        ftpstream.Write(buffer, 0, buffer.Length);
        ftpstream.Close();

        MessageBox.Show("Success !!");
      }
      catch { MessageBox.Show("Failure !!"); }
    }

    private void DoingThread()
    {
      ftpfile(@"/new_folder/test1.html", @"C:\test1.html"); 
      // you can change ftpfilepath and inputfilepath here
    }

    private void upload_Click(object sender, EventArgs e)
    {
      ftpHostName = hostname.Text; 
      //hostname or IP of the ftp server that was given must begin with "ftp://"
            
      ftpUserID = userid.Text;
      ftpPassword = password.Text;
      Thread done = new Thread(DoingThread);
      done.Start();
    }
  }
}
สำหรับการ Download File ผ่านระบบ FTP นั้น สามารถศึกษาโค้ดเพิ่มเติมได้ที่ลิ้งค์นี้เลยครับ
http://msdn.microsoft.com/en-us/library/ms229711.aspx

No comments:

Post a Comment