Nahranie / stiahnutie súboru z FTP v C # .NET
V tomto tutoriále si postupne prejdeme manipulácia so súbormi skrze FTP server. Ukážeme si ako získať zoznam súborov zo zložky, nahranie súboru a tiež prevzatie súboru.
Čo je to FTP sme si už popísali v predchádzajúcom článku FTP výpis súborov zo zložky v C#, takže ako dnes začneme, bolo by dobré si najprv prečítať minulý tutoriál.
Užívateľské rozhranie
Užívateľské rozhranie vezmeme z minulého projektu. Dnes opäť nebudeme užívateľské rozhranie moc editovať a naše hlavné pozornosť sa uberie ku kódu.
Pridáme si iba 2 buttony (tlačidlá) a nazveme si ich btnUploadFile a btnDownloadFile. Príklad viď. obrázok nižšie.
Príprava udalostí
Udalosti môžeme vytvoriť dvojklikom na našu komponent, v našom prípade to je btnUploadFile a btnDownloadFile. Tiež možno ale zvoliť iný štýl a to ísť do sekcie Properties (vlastnosti) a tam zvoliť položku Events (udalosti). Tu si zvolíme udalosť Click a dvojklikom sa nám udalosť vytvorí a dostaneme sa do kódu. Príklad viď. obrázok nižšie.
Menné priestory
Menné priestory využijeme rovnaké ako v predchádzajúcom článku. Pre úplnosť je vypíšem aj tu.
- using System.IO;
- using System.Net;
Nahranie súboru na FTP
Nahratí súboru priradíme k tlačidlu btnUploadFile, teraz sa teda prepneme do kódu a do našej udlásti Click začneme tvoriť.
Uri
Ako prvý krok si vytvoríme novú inštanciu triedy Uri, do ktorej cez konštruktor uvedieme adresu nášho FTP servera až po koncový súbor, ktorý sa má nahrať. Pozor, tu sa nedá používať trieda Path.
- Konštruktor je typu string
Uri uri = new Uri(@"ftp://[email protected]/Slozka1/Slozka2/JmenoSouboru.txt");
WebClient
Trieda WebClient poskytuje spoločné metódy pre odosielanie a príjem dát z prostriedkov určených identifikátorom URI. My tu ako URI užívame FTP server, takže s ním budeme aj naďalej pracovať. Trieda WebClint disponuje veľkým množstvom užitočných metód na manipuláciu so súbormi na FTP servera, ale my si tu pre náš príklad uvedieme len tých pár základných najviac používaných, s ktorými si ale hocikde vystačíte.
- DownloadFile
- UploadFile
- GetWebRequest
- GetWebResponse
Vďaka triede WebClient sa dajú použiť aj metódy OpenWrite alebo OpenRead a čítať či zapisovať dátový tok. Pre nás sú ale tieto postupy zatiaľ zbytočné a nevidím dôvod prečo si nevystačit s metódami UploadFile a DownloadFile.
Takže si vytvoríme novú inštanciu triedy WebClient a nazveme ju WebClient.
Ďalej je potrebné opäť nastaviť vlastnosť Credentials (prístupové údaje). Tieto údaje vložíme do Credentials skrze triedu NetworkCredential, kde zadáme do konstruktoru dve string hodnoty (prihlasovacie meno a heslo).
WebClient webClient = new WebClient(); webClient.Credentials = new NetworkCredential("ucet", "heslo");
Metóda UploadFile
Teraz u nášho WebClient použijeme metódu UploadFile k nahranie nášho súboru na FTP server.
Metóda UploadFile má 3 vstupné parametre.
- adresu typu string
- metódu typu string
- názov súboru typu string
Ako adresu použijeme naše vyššie vytvorené Uri.
Na určenie metódy použijeme metódu triedy WebRequestMethod. Dostupné metódy tejto triedy som popisoval v predchádzajúcom článku FTP výpis súborov zo zložky v C#. My použijeme metódu UploadFile.
Ako názov súboru použijeme cestu kam chceme aby sa súbor uložil vrátane jeho mena. Ja som tu použil Application.StartupPath a tá vráti cestu k nášmu exe súboru programu. Triedu Application je určite dobré poznať, preto ju popíšem nižšie.
Trieda Application
Táto trieda poskytuje statické metódy a vlastnosti k správe aplikácie, rovnako tak metódy k štartu / ukončenie aplikácie a vlastnosti na získanie informácií o aplikácii.
Vlastnosti
- StartupPath = cesta k spustiteľnému súboru, ktorý spúšťa aplikáciu (okrem mena súboru).
- UserAppDataPath = Cesta zložky AppData užívateľa.
- CommonAppDataPath = cesta k verejné (zdieľanej) zložke AppData medzi všetkými užívateľmi.
Metódy
- run
- Exit
- Restart
webClient.UploadFile(uri, WebRequestMethods.Ftp.UploadFile, Application.StartupPath + @"\\JmenoSouboru.txt");
Týmto sme úspešne nahrali súbor na náš FTP server a teraz sa pustíme do kódu pre stiahnutie súboru z FTP.
Stiahnutie súboru na FTP
Nahratí súboru priradíme k tlačidlu btnDownloadFile. Teraz sa teda prepneme do kódu a do našej udalosti Click začneme tvoriť.
Postup je takmer totožný s nahraním súboru na FTP. Opäť si vytvoríme inštanciu triedy Uri a do konstruktoru vložíme cestu až po požadovaný súbor, ktorý chceme stiahnuť.
Uri uri = new Uri(@"ftp://[email protected]/Slozka1/Slozka2/SouborCoChci.txt";
Teraz si opäť vytvoríme novú inštanciu triedy WebClient WebClient a do jej vlastnosti Credentials (prístupové údaje) vložíme náš účet a heslo k FTP serveru.
WebClient webClient = new WebClient(); webClient.Credentials = new NetworkCredential("ucet", "heslo");
U nadchádzajúceho kroku sa už postup mení a namiesto toho aby sme u WebClient použili metódu UploadFile, tak si nájdeme metódu DownloadFile a tú tu využijeme.
Metóda DownloadFile
Teraz u nášho WebClient použijeme metódu DownloadFile k stiahnutiu nášho súboru z FTP servera.
Metóda DownloadFile má 2 vstupné parametre.
- adresu typu string
- názov súboru typu string
Ako adresu použijeme naše vyššie vytvorené Uri.
Ako názov súboru tu už nepíšeme celú cestu, kde má vzniknúť súbor, ale iba naše požadované meno súboru. Takže jednoducho textom napíšeme nami vybrané meno.
Pozn. Súbor sa automaticky uloží do cesty Application.StartupPath, takže by ste ho mali mať na konci podobnej cesty ako je táto:
C:\Users\Jakub\Documents\Visual Studio 2012\Projects\ITnetwork\ITnetwork\bin\Debug\JmenoSouboru.txt
webClient.DownloadFile(uri, "JmenoSouboru.txt");
Týmto máme náš kód hotový a vďaka pridaniu našich 2 tlačidiel môžete nahrať súbor na FTP server a alebo si súbor z FTP servera stiahnuť. Ak ste viac kreatívny než ja v tomto tutoriálu, tak si do aplikácie môžete pridať TextBox a jednoducho sťahovať / nahrávať súbory, ktoré si do text boxu napíšete. Stačí len miesto parametra názov súboru napísať tbxNazevSouboru.Text a je hotovo.
Možností je tu naozaj veľa a už je to len na vás ako to vo svojej aplikácii využijete. Teším sa nabudúce v ďalšom tutoriále o FTP manipuláciu so súbormi.