Lekce 6 - Nahrání/stažení souboru z FTP v C# .NET
V minulé lekci, FTP výpis souborů ze složky v C# .NET, jsme si ukázali využití streamu k vypsání
souborů ze složky na FTP serveru do komponenty ListBox
.
V dnešním Windows Forms tutoriálu si postupně projdeme manipulace se soubory skrze FTP server. Ukážeme si jak získat seznam souborů ze složky, nahrání souboru a také stažení souboru.
Co je to FTP jsme si již popsali v článku FTP výpis souborů ze složky v C#,
Uživatelské rozhraní
Uživatelské rozhraní vezmeme z minulého projektu. Dnes opět nebudeme uživatelské rozhraní moc editovat a naše hlavní pozornost se ubere ke kódu.
Přidáme si pouze dva tlačítka a nazveme si je
btnUploadFile
a btnDownloadFile
:

Příprava událostí
Události můžeme vytvořit dvojklikem na naši komponentu,
v našem případe to je btnUploadFile
a
btnDownloadFile
.
Také lze ale zvolit jiný styl a to jít do sekce Properties (vlastnosti), a tam zvolit položku Events (události).
Zvolíme událost Click:

Dvojklikem na událost Click ji vytvoříme, a zároveň nás to přenese do jejího kódu.
Jmenné prostory
Přidáme si tyto jmenné prostory:
using System.IO;
using System.Net;
Náhrání souboru na FTP server
Nahrání souboru přiřadíme k tlačítku btnUploadFile
. Nyní
se tedy přepneme do kódu a do naší události Click
, kde
začneme tvořit.
Třída Uri
Jako první krok si vytvoříme novou instanci třídy Uri
, do
které přes konstruktor uvedeme adresu našeho FTP serveru až po koncový
soubor, který se má nahrát. Konstruktor je typu string
:
Uri uri = new Uri(@"ftp://[email protected]/Slozka1/Slozka2/JmenoSouboru.txt");
Pozor, zde se nedá používat třída Path
.
Třída WebClient
Třída WebClient
poskytuje společné metody pro
odesílání a příjem dat z prostředků
určených identifikátorem uri
. My zde jako URI užíváme FTP
server, takže s ním budeme i nadále pracovat. Třída WebClint
disponuje velkým množstvím užitečných metod k manipulaci se soubory na FTP
serveru. My si zde pro náš příklad uvedeme jen těchto pár základních
nejvíce používaných:
DownloadFile()
UploadFile()
GetWebRequest()
GetWebResponse()
Díky třídě WebClient
se dají použít i metody
OpenWrite()
nebo OpenRead()
a číst či zapisovat
datový tok. Takže si vytvoříme novou instanci třídy
WebClient
a nazveme ji webClient
.
Dále je potřeba opět nastavit vlastnost Credentials
(přístupové údaje). Tyto údaje vložíme do vlastnosti
Credentials
skrze třídu NetworkCredential
, kde
zadáme do konstruktoru dvě string
hodnoty (přihlašovací jméno
a heslo):
WebClient webClient = new WebClient(); webClient.Credentials = new NetworkCredential("ucet", "heslo");
Metoda UploadFile()
Nyní v naší třídě WebClient
použijeme metodu
UploadFile()
k nahrání našeho souboru na FTP server.
Metoda UploadFile()
má tři vstupní parametry:
- adresu typu
string
, - metodu typu
string
, - název souboru typu
string
.
Jako adresu použijeme naše výše vytvořené
Uri
.
K určení metody použijeme metodu třídy
WebRequestMethod
. Dostupné metody této třídy jsme si popsali v
článku FTP výpis
souborů ze složky v C#. My použijeme metodu
UploadFile()
.
Jako název souboru použijeme cestu kam chceme aby se
soubor uložil včetně jeho jména. Já jsem zde použil
Application.StartupPath
a ta vrátí cestu k našemu
exe
souboru aplikace. Třídu Application
je potřeba
znát, a proto si ji popíšeme.
Třída Application
Tato třída poskytuje statické metody a vlastnosti ke správě aplikace, stejně tak metody ke startu/ukončení aplikace a vlastnosti k získání informací o aplikaci.
Vlastnosti
Vlastnosti třídy Application
jsou následující:
StartupPath
- cesta ke spustitelnému souboru, který spouští aplikaci (mimo jména souboru),UserAppDataPath
- cesta ke složceAppData
uživatele,CommonAppDataPath
- cesta k veřejné (sdílené) složceAppData
mezi všemi uživateli.
Metody
Metody třídy Application
jsou následující:
Run()
,Exit()
,Restart()
.
Vložíme si následující kód:
webClient.UploadFile(uri, WebRequestMethods.Ftp.UploadFile, Application.StartupPath + @"\\JmenoSouboru.txt");
Tímto jsme úspěšně nahráli soubor na náš FTP server a nyní se pustíme do kódu pro stažení souboru z FTP.
Stažení souboru na FTP server
Nahrání souboru přiřadíme k tlačítku btnDownloadFile
.
Nyní se tedy přepneme do kódu a do naší události Click
.
Postup je téměř totožný s nahráním souboru na FTP. Opět si vytvoříme
instanci třídy Uri
a do konstruktoru vložíme cestu až po
požadovaný soubor, který chceme stáhnout:
Uri uri = new Uri(@"ftp://[email protected]/Slozka1/Slozka2/SouborCoChci.txt";
Teď si opět vytvoříme novou instanci webClient
třídy
WebClient
a do její vlastnosti Credentials
(přístupové údaje) vložíme náš účet a heslo k FTP serveru:
WebClient webClient = new WebClient(); webClient.Credentials = new NetworkCredential("ucet", "heslo");
U nadcházejícího kroku se již postup mění a místo toho aby jsme u
webClient
použili metodu UploadFile()
, tak si najdeme
metodu DownloadFile()
a tu zde využijeme.
Metoda DownloadFile()
Nyní u naší instance webClient
použijeme metodu
DownloadFile()
ke stažení našeho souboru z FTP serveru. Metoda
DownloadFile()
má dva vstupní parametry:
- adresu typu
string
, - název souboru typu
string
.
Jako adresu použijeme naše výše vytvořené
Uri
. Jako název souboru zde již nepíšeme celou
cestu, kde má vzniknout soubor, ale pouze naše požadované jméno
souboru. Takže jednoduše textem napíšeme námi vybrané jméno.
Soubor se automaticky uloží do cesty Application.StartupPath
,
takže bychom měli mít na konci podobné cesty, jako jsou tyto:
C:\Users\Jakub\Documents\Visual Studio 2012\Projects\ITnetwork\ITnetwork\bin\Debug\JmenoSouboru.txt
A tato:
webClient.DownloadFile(uri, "JmenoSouboru.txt");
Tímto máme náš kód hotový a díky přidání našich dvou tlačítek můžete nahrát soubor na FTP server, a nebo si soubor z FTP serveru stáhnout.