Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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:

Formulář aplikace - Síť v C# .NET

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:

Událost_Click - Síť v C# .NET

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žce AppData uživatele,
  • CommonAppDataPath - cesta k veřejné (sdílené) složce AppData 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.


 

Předchozí článek
FTP výpis souborů ze složky v C# .NET
Všechny články v sekci
Síť v C# .NET
Článek pro vás napsal Jakub Lásko[Saarix]
Avatar
Uživatelské hodnocení:
5 hlasů
Věnuji se programování v C#, MonoGame a Unity.
Aktivity