Nahrání/stažení souboru z FTP v C# .NET

C# .NET Práce se soubory Nahrání/stažení souboru z FTP v C# .NET

V tomto 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 předchozím článku FTP výpis souborů ze složky v C#, takže než dnes začneme, bylo by dobré si nejprve přečíst minulý tutoriál.

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 2 buttony (tlačítka) a nazveme si je btnUploadFile a btnDownloadFile. Příklad viz. obrázek níže.

Formulář aplikace

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). Zde si zvolíme událost Click a dvojklikem se nám událost vytvoří a dostaneme se do kódu. Příklad viz. obrázek níže.

Událost_Click

Jmenné prostory

Jmenné prostory využijeme stejné jako v předchozím článku. Pro úplnost je vypíšu i zde.

  • using System.IO;
  • using System.Net;

Náhrání souboru na FTP

Nahrání souboru přiřadíme k tlačítku btnUploadFile, nyní se tedy přepneme do kódu a do naší udlásti Click začneme tvořit.

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. Pozor, zde se nedá používat třída Path.

  • Konstruktor je typu string
Uri uri = new Uri(@"ftp://4ce@lusorion.com/Slozka1/Slozka2/JmenoSouboru.txt");

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, ale my si zde pro náš příklad uvedeme jen těch pár základních nejvíce používaných, se kterými si ale leckde vystačíte.

  • DownloadFile
  • UploadFile
  • GetWebRequest
  • GetWebResponse

Díky třídě WebClient se dají použít i metody OpenWrite nebo OpenRead a číst či zapisovat datový tok. Pro nás jsou ale tyto postupy zatím zbytečné a nevidím důvod proč si nevystačit s metodami UploadFile a DownloadFile.

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 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í u našeho webClienta použijeme metodu UploadFile k nahrání našeho souboru na FTP server.

Metoda UploadFile má 3 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 jsem popisoval v předchozím č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.Star­tupPath a ta vrátí cestu k našemu exe souboru aplikace. Třídu Application je určitě dobré znát, proto ji popíšu níže.

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
  • StartupPath = cesta ke spustitelnému souboru, který spouští aplikaci (mimo jména souboru).
  • UserAppDataPath = cesta ke šložce AppData uživatele.
  • CommonAppDataPath = cesta k veřejné (sdílené) složce AppData mezi všemi uživateli.
Metody
  • Run
  • Exit
  • Restart
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

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 začneme tvořit.

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://4ce@lusorion.com/Slozka1/Slozka2/SouborCoChci.txt";

Teď si opět vytvoříme novou instanci třídy WebClient 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šeho webClienta použijeme metodu DownloadFile ke stažení našeho souboru z FTP serveru.

Metoda DownloadFile má 2 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.

Pozn. Soubor se automaticky uloží do cesty Application.Star­tupPath, takže by jste ho měli mít na konci podobné cesty jako je tato:

C:\Users\Jakub\Documents\Visual Studio 2012\Projects\Devbook\Devbook\bin\Debug\JmenoSouboru.txt
webClient.DownloadFile(uri, "JmenoSouboru.txt");

Tímto máme náš kód hotový a díky přidání našich 2 tlačítek můžete nahrát soubor na FTP server a nebo si soubor z FTP serveru stáhnout. Pokud jste více kreativní než já v tomto tutoriálu, tak si do aplikace můžete přidat TextBox a jednoduše stahovat/nahrávat soubory, které si do text boxu napíšete. Stačí jen místo parametru název souboru napsat tbxNazevSoubo­ru.Text a je hotovo.

Možností je zde opravdu hodně a už je to jen na vás jak to ve své aplikaci využijete. Těším se příště v dalším tutoriálu o FTP manipulaci se soubory.


 

  Aktivity (3)

Článek pro vás napsal Jakub Lásko[Saarix]
Avatar
Věnuji se programování v C#, MonoGame a Unity.

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 


Miniatura
Všechny články v sekci
Práce se soubory v C#

 

 

Komentáře
Zobrazit starší komentáře (3)

Avatar
iximfo
Člen
Avatar
iximfo:

Dobrý den chci se zeptat to URI musí být před připravené.

 
Odpovědět 16.6.2014 20:12
Avatar
KlimiCZ
Člen
Avatar
Odpovídá na iximfo
KlimiCZ:

Jak připravené ?

Odpovědět 16.6.2014 21:50
Nesnaž se zakrýt něco, co jsi provedl úmyslně. Svět je tak malý, že dotyčný se to stejně dozví.
Avatar
dickulus
Člen
Avatar
dickulus:

Pěkný člaánek. A hlavně není za ty ******* body!

Odpovědět 20.6.2014 15:04
Od té doby co zde zavedli ty *píp* body čtu české články jen na zive.cz! Fandím těm, kteří sem dávají články bez bodů!
Avatar
iximfo
Člen
Avatar
Odpovídá na KlimiCZ
iximfo:

Jestli ten server musí být připravený předem.

 
Odpovědět 23.6.2014 17:29
Avatar
forcabarca
Člen
Avatar
forcabarca:

"DÍKY" za vyvěšený kód u tohoto i předešlého dílu.

 
Odpovědět 30. ledna 20:16
Avatar
Odpovídá na forcabarca
Ondřej Štorc:

Nevím co by jsi chtěl víc, máš tady napsaný kód pro ty hlavní části aplikace (stažení, nahrání souborů a v předešlém i výpis) takže tu omáčku kolem si dokáže udělat každý sám. Takže to není o tom že autor ti nic nedal, ale o tom že ty jsi nebyl ochoten obětovat kousek svého času a pročíst si článek, kde je vše vysvětleno a naklikat si formulář...

Odpovědět  +1 30. ledna 21:33
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
forcabarca
Člen
Avatar
forcabarca:

"tu omáčku kolem si dokáže udělat každý sám" - ano, namísto abych si stáhl kód, spustil si ho a díval se jak reaguje, tak musím sám vymýšlet jak přesně ho dát dohromady. V Itnetworku se kód skoro vždy vyvěšuje, nevím proč by nemohl být vyvěšený i tady. To co jsi napsal jsou jen kecy z lidí z velkých firem kteří jsou zvyklí na buzeraci kdykoliv se kvůli něčemu ozvou, tak je rychle zadupat. Autor MĚL přidat kód, nepřidal ho a je to úplně zbytečné přidání práce tomu kdo se z toho chce učit. Vše ostatní jsou jen kecy a výmluvy.

 
Odpovědět  -4 1. února 20:00
Avatar
Odpovídá na forcabarca
Ondřej Štorc:

Ne nejsou. Autor ten článek za prvý vůbec ani psát nemusel. Vzhled formuláře máš ukázaný, máš tam i napsané co je to za kontrolky. Máš tam napsaný co do kterých událostí píše. Takže nevím na co si stěžuješ. A ano kód mohl přidat, ale taky to nemusel a to právě z tohohle důvodu, že každý by si to jen stáhl a neprojevil trochu vlastní iniciativy. Jinak on se toho člověk naučí mnohem víc když řeší problém, který mu dá zabrat a postupně objeví kde má chybu atd. než když jako cvičená opice opíše a okouká vše do posledního detailu.

Odpovědět 1. února 20:33
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
forcabarca
Člen
Avatar
forcabarca:

Tohle jsou jen arogantní kecy člověka, kterému je lepší se vyhnout, nebudu to komentovat, měj se.

 
Odpovědět  -3 1. února 21:15
Avatar
Adam Kácha
Člen
Avatar
Adam Kácha:

Uri uri = new Uri(@"ftp://4­ce@lusorion.com/Sloz­ka1/Slozka2/Jme­noSouboru.txt);
Chybí uvozovka :-)
Jinak zajímavej článek. Pomohl

 
Odpovědět  +1 7. května 16:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 13. Zobrazit vše