8 – Práce se soubory

 
 

 

Tato kapitola vysvětluje, jak číst ze souborů, zapisovat do nich, připojovat k nim data, odstraňovat je nebo nahrávat.

V předchozích kapitolách jste se dozvěděli, jak ukládat data v databázi. Na svém webu můžete ale pracovat také s textovými soubory. Textové soubory mohou například sloužit jako jednoduchý způsob uložení dat webu. (Textový soubor použitý pro uložení dat je někdy označován jako plochý soubor.) Textové soubory mohou být v různých formátech, například TXT, XML nebo CSV.

Co se naučíte:

V této kapitole budou představeny následující funkce programování pomocí technologie ASP.NET:

Poznámka   Informace o tom, jak nahrávat obrázky a manipulovat s nimi (například jak je překlápět nebo měnit jejich velikost) najdete v kapitole 9: Práce s obrázky.

 

 

Vytvoření textového souboru a zápis dat do něj

Pro uložení dat do textového souboru je možné pomocí metody File.WriteAllText (Soubor.Zapsat veškerý text) určit soubor, který má být vytvořen, a data, která do něj mají být zapsána. V tomto postupu vytvoříme stránku obsahující jednoduchý formulář se třemi vstupními elementy input (jméno, příjmení a e-mailová adresa) a tlačítko Submit (Odeslat). Když uživatel formulář odešle, uložíme vstup uživatele do textového souboru.

  1. Pokud ještě neexistuje, vytvořte složku s názvem App_Data.
  2. V kořenové složce svého webu vytvořte nový soubor s názvem UserData.cshtml.
  3. Výchozí kód značkovacího jazyka a programový kód nahraďte následujícím kódem:
    @{ 
        var result = ""; 
        if (IsPost) 
        { 
            var firstName = Request["FirstName"]; 
            var lastName = Request["LastName"]; 
            var email = Request["Email"]; 
     
            var userData = firstName + "," + lastName + 
                "," + email + Environment.NewLine; 
     
            var dataFile = Server.MapPath("/App_Data/data.txt"); 
            File.WriteAllText(@dataFile, userData); 
            result = "Information saved."; 
        } 
    } 
    <!DOCTYPE html> 
    <html> 
    <head> 
        <title>Write Data to a File</title> 
    </head> 
    <body> 
        <form id="form1" method="post"> 
        <div> 
            <table> 
                <tr> 
                    <td>First Name:</td> 
                    <td><input id="FirstName" name="FirstName" type="text" /></td> 
     
                </tr> 
                <tr> 
                    <td>Last Name:</td> 
                    <td><input id="LastName" name="LastName" type="text" /></td> 
                </tr> 
                <tr> 
                    <td>Email:</td> 
                    <td><input id="Email" name="Email" type="text" /></td> 
                </tr> 
                <tr> 
                    <td></td> 
                    <td><input type="submit" value="Submit"/></td> 
                </tr> 
            </table> 
        </div> 
        <div> 
        @if(result != ""){ 
            <p>Result: @result</p> 
        } 
        </div> 
        </form> 
    </body> 
    </html>

    V kódu značkovacího jazyka je vytvořen formulář se třemi textovými poli. Před začátkem zpracování zjistíme nejprve v kódu pomocí vlastnosti IsPost (Je požadavek Post), zda byla stránka odeslána.

    Prvním úkolem je získat vstup uživatele a přiřadit jej proměnným. Kód poté zřetězí hodnoty jednotlivých proměnných do jednoho řetězce odděleného čárkou, který je následně uložen do jiné proměnné. Všimněte si, že čárka představující oddělovač je uzavřena v dvojitých uvozovkách (","), protože do velkého vytvářeného řetězce doslova vkládáme čárku. Na závěr zřetězených dat přidáme výraz Environment.NewLine (Prostředí.Nový řádek). Tato vlastnost přidá konec řádku (znak nového řádku). Všechno toto zřetězení slouží k vytvoření řetězce, který může vypadat například takto:

    David,Jones,davidj@contoso.com

    (Na konci s neviditelným koncem řádku.)

    Poté vytvoříme proměnnou dataFile (datový soubor) obsahující umístění a název souboru, v němž mají být data uložena. Nastavení umístění je třeba speciálně ošetřit. Na webech není vhodné odkazovat se v kódu na absolutní cesty k souborům na webovém serveru (např. C:\Folder\File.txt ). V případě přesunu webu bude absolutní cesta chybná. U hostovaných webů (na rozdíl od webů provozovaných ve vašem vlastním počítači) navíc při psaní kódu správnou cestu obvykle ani neznáte.

    Ale někdy, jako například nyní při zápisu do souboru, je úplná cesta vyžadována. Řešením je použít metodu MapPath (Mapovat cestu) objektu Server. Tato metoda vrací úplnou cestu k webu. Chcete-li získat cestu ke kořenu webu, předáte metodě MapPath znak "~". (Můžete jí předat také název podsložky, například /App_Data/, a získat tak cestu k této podsložce.) úplnou cestu pak vytvoříme tak, že s cestou, kterou metoda vrátí, zřetězíme další informace. V tomto příkladu přidáváme název souboru. (Více informací o tom, jak pracovat s cestami k souborům a složkám, získáte v kapitole 2 – úvod do programování webů ASP.NET s použitím syntaxe Razor.)

    Soubor je uložen ve složce App_Data. Jedná se o speciální složku technologie ASP.NET určenou pro ukládání datových souborů, jak popisuje kapitola 5 – Práce s daty.

    Metoda WriteAllText (Zapsat veškerý text) objektu File (Soubor) zapíše data do souboru. Tato metoda přijímá dva parametry: název souboru (včetně cesty), do něhož mají být data zapsána, a samotná zapisovaná data. Všimněte si, že předponu názvu první proměnné tvoří znak @. To technologii ASP.NET upozorňuje na skutečnost, že předáváme doslovný řetězcový literál a že znaky jako například "/" nemají být speciálně interpretovány. (Více informací najdete v kapitole 2.)

    Poznámka   Aby váš kód mohl ukládat soubory do složky App_Data, aplikace pro tuto složku potřebuje oprávnění ke čtení a zápisu. V počítači používaném pro vývoj to obvykle není problém. Ale je možné, že když web publikujete na webovém serveru poskytovatele hostingových služeb, budete muset tato oprávnění speciálně nastavit. Pokud tento kód spouštíte na serveru poskytovatele hostingových služeb a dochází při tom k chybám, zjistěte si od poskytovatele hostingových služeb, jak tato oprávnění nastavit.
  4. Spusťte stránku v prohlížeči. (Před jejím spuštěním ověřte, zda je stránka vybrána v pracovním prostředí Files – Soubory.)

    ch8files-1

  5. Zadejte do polí hodnoty a pak klikněte na tlačítko Submit (Odeslat).
  6. Zavřete prohlížeč.
  7. Vraťte se do projektu a aktualizujte zobrazení.
  8. Otevřete soubor data.txt. Soubor bude obsahovat data, která jste zadali ve formuláři.

    ch8files-2

  9. Zavřete soubor data.txt.

Přidání dat do existujícího souboru

V předchozím příkladu jsme pomocí metody WriteAllText (Zapsat veškerý text) vytvořili textový soubor obsahující pouze jeden datový údaj. Pokud metodu zavoláte znovu a předáte jí stejný název souboru, bude stávající soubor zcela přepsán. Po vytvoření souboru ale budete často potřebovat přidat na konec souboru nová data. To je možné provést pomocí metody AppendAllText (Připojit veškerý text) objektu File (Soubor).

  1. Vytvořte na webu kopii souboru UserData.cshtml a změňte její název na UserDataMultiple.cshtml.
  2. Blok kódu před úvodní značkou <!DOCTYPE html> nahraďte následujícím blokem kódu:
    @{ 
        var result = ""; 
        if (IsPost) 
        { 
            var firstName = Request["FirstName"]; 
            var lastName = Request["LastName"]; 
            var email = Request["Email"]; 
     
            var userData = firstName + "," + lastName + 
                "," + email + Environment.NewLine; 
     
            var dataFile = Server.MapPath("/App_Data/data.txt"); 
            File.AppendAllText (@dataFile, userData); 
            result = "Information saved."; 
        } 
    }

    Tento kód oproti předchozímu příkladu obsahuje jednu změnu. Místo metody WriteAllText (Zapsat veškerý text) používá metodu AppendAllText (Připojit veškerý text). Tyto dvě metody si jsou podobné. Rozdíl spočívá v tom, že metoda AppendAllText data přidává na konec souboru. Stejně jako metoda WriteAllText i metoda AppendAllText soubor vytvoří v případě, že neexistuje.

  3. Spusťte stránku v prohlížeči.
  4. Zadejte do polí hodnoty a pak klikněte na tlačítko Submit (Odeslat).
  5. Přidejte další data a formulář znovu odešlete.
  6. Vraťte se zpět do projektu, klikněte pravým tlačítkem na složku projektu a pak klikněte na příkaz Refresh (Aktualizovat).
  7. Otevřete soubor data.txt. Bude nyní obsahovat nová data, která jste právě zadali.

    ch8files-3

Čtení a zobrazení dat ze souboru

I pokud nebudete potřebovat data do textového souboru zapsat, budete nejspíš občas potřebovat data z textového souboru přečíst. K tomu můžete opět použít objekt File (Soubor). Pomocí objektu File můžete číst jednotlivé řádky (oddělené konci řádků) nebo můžete číst jednotlivé položky bez ohledu na to, jak jsou odděleny.

Tento postup ukazuje, jak přečíst a zobrazit data vytvořená v předchozím příkladu.

  1. V kořenové složce webu vytvořte nový soubor s názvem DisplayData.cshtml.
  2. Stávající kód nahraďte následujícím kódem:
    @{ 
        var result = ""; 
        Array userData = null; 
        char[] delimiterChar = {','}; 
     
        var dataFile = Server.MapPath("/App_Data/data.txt"); 
     
        if (File.Exists(dataFile)) { 
            userData = File.ReadAllLines(dataFile); 
            if (userData == null) { 
                
    // Prázdný soubor
                 result = "The file is empty.";         } 
        } 
        else { 
            
    // Soubor neexistuje.
             result = "The file does not exist.";     } 
    } 
    <!DOCTYPE html> 
     
    <html> 
    <head> 
        <title>Reading Data from a File</title> 
    </head> 
    <body> 
        <div> 
            <h1>Reading Data from a File</h1> 
            @result 
            @if (result == "") { 
                <ol> 
                @foreach (string dataLine in userData) { 
                <li> 
                    User 
                    <ul> 
                    @foreach (string dataItem in dataLine.Split(delimiterChar)) { 
                        <li>@dataItem</li > 
                    } 
                    </ul> 
                </li> 
                } 
                </ol> 
            } 
        </div> 
    </body> 
    </html>

    Kód začíná tím, že soubor vytvořený v předchozím příkladu načte do proměnné s názvem userData (data uživatele) pomocí tohoto volání metody:

    File.ReadAllLines(dataFile)

    Tento kód se nachází uvnitř příkazu if. Když chcete číst ze souboru, je vhodné přesvědčit se nejprve pomocí metody File.Exists (Soubor.Existuje), zda je soubor k dispozici. Kód také kontroluje, zda soubor není prázdný.

    Tělo stránky obsahuje dvě smyčky foreach, jednu vnořenou do druhé. Vnější smyčka foreach načítá po jednom řádky ze souboru s daty. V tomto případě jsou řádky definované konci řádků v souboru – tzn., že každá položka dat se nachází na vlastním řádku. Vnější smyčka vytvoří novou položku (element <li>) uvnitř uspořádaného seznamu (elementu <ol>).

    Vnitřní smyčka rozděluje jednotlivé řádky dat na položky (pole) s použitím čárky jako oddělovače. (Vyjdeme-li z předchozího příkladu, znamená to, že každý řádek obsahuje tři pole – jméno, příjmení a e-mailovou adresu – a každé z nich je oddělené čárkou.) Vnitřní smyčka také vytváří seznam <ul> a zobrazuje jednu položku seznamu pro každé pole řádku s daty.

    Tento kód předvádí, jak používat dva typy dat – pole a datový typ char. Pole je zapotřebí, protože metoda File.ReadAllLines (Soubor.Přečíst všechny řádky) data vrací jako pole. Datový typ char je zapotřebí, protože metoda Split (Rozdělit) jako parametr přijímá pole, jehož prvky jsou typu char. (Další informace o polích získáte v kapitole 2 – úvod do programování webů ASP.NET s použitím syntaxe Razor.)

  3. Spusťte stránku v prohlížeči. Budou zobrazena data zadaná v předchozím příkladu.

    ch8files-4

Odstranění souborů

K odstranění souborů z webu je možné použít metodu File.Delete (Soubor.Odstranit). Tento postup ukazuje, jak poskytnout uživatelům možnost odstranit obrázek (soubor JPG) ze složky images (obrázky), pokud znají název souboru.

Důležité   Na produkčním webu obvykle platí omezení, kdo smí provádět změny dat. Informace, jak zřídit členství a jak autorizovat uživatele pro provádění úloh na webu, získáte v kapitole 16 – Přidání zabezpečení a členství.
  1. Na webu vytvořte složku s názvem images (obrázky).

    ch8files-5

  2. Do složky images zkopírujte jeden nebo více souborů JPG.
  3. V kořenové složce webu vytvořte nový soubor s názvem FileDelete.cshtml.
  4. Výchozí kód značkovacího jazyka a programový kód nahraďte následujícím kódem:
    @{ 
        bool deleteSuccess = false; 
        var photoName = ""; 
        if (IsPost) { 
            photoName = Request["photoFileName"] + ".jpg"; 
            var fullPath = Server.MapPath("/images/" + photoName); 
     
            if (File.Exists(fullPath)) 
            { 
                    File.Delete(fullPath); 
                    deleteSuccess = true; 
            } 
        } 
    } 
    <!DOCTYPE html> 
    <html> 
      <head> 
        <title>Delete a Photo</title> 
      </head> 
      <body> 
        <h1>Delete a Photo from the Site</h1> 
        <form name="deletePhoto" action="" method="post"> 
          <p>File name of image to delete (without .jpg extension): 
          <input name="photoFileName" type="text" value="" /> 
          </p> 
          <p><input type="submit" value="Submit" </p> 
        </form> 
     
        @if(deleteSuccess) { 
            <p> 
            @photoName deleted! 
            </p> 
            } 
      </body> 
    </html>

    Tato stránka obsahuje formulář, ve kterém uživatelé mohou zadat název souboru s obrázkem. Uživatelé nebudou zadávat příponu JPG názvu souboru. Tím, že název souboru takto omezíte, předejdete tomu, aby uživatelé mohli z vašeho webu odstranit libovolný soubor.

    Kód načte název souboru zadaný uživatelem a poté vytvoří úplnou cestu. Pro vytvoření cesty kód používá aktuální cestu k webu, tak jak ji vrátila metoda Server.MapPath (Server.Mapovat cestu), název složky s obrázky (images), název poskytnutý uživatelem a řetězcový literál ".jpg".

    Kód soubor odstraní pomocí volání metody File.Delete (Soubor.Odstranit), které předá úplnou, právě vytvořenou cestu. Na konci kódu značkovacího jazyka kód zobrazí zprávu s potvrzením, že soubor byl odstraněn.

  5. Spusťte stránku v prohlížeči.

    ch8files-6

  6. Zadejte název souboru, který má být odstraněn, a poté klikněte na tlačítko Submit (Odeslat). Pokud byl soubor odstraněn, je název souboru zobrazen ve spodní části stránky.

Poskytnutí možnosti nahrát soubor

Pomocná třída FileUpload (Nahrání souboru) uživatelům umožňuje nahrát soubory na web. Níže uvedený postup ukazuje, jak uživatelům poskytnout možnost nahrát na web jeden soubor.

  1. Pokud jste ji ještě nepřidali, přidejte na svůj web knihovnu pomocných webových tříd ASP.NET tak, jak popisuje kapitola 1 – Začínáme se sadou WebMatrix a webovými stránkami ASP.NET.
  2. Ve složce App_Data vytvořte novou složku s názvem UploadedFiles (Nahrané soubory).
  3. V kořenové složce vytvořte nový soubor s názvem FileUpload.cshtml.
  4. Stávající kód značkovacího jazyka ve stránce nahraďte následujícím kódem:
    @{ 
        var fileName = ""; 
        if (IsPost) { 
            var fileSavePath = ""; 
            var uploadedFile = Request.Files[0]; 
            fileName = Path.GetFileName(uploadedFile.FileName); 
            fileSavePath = Server.MapPath("/App_Data/UploadedFiles/" + 
              fileName); 
            uploadedFile.SaveAs(fileSavePath); 
        } 
    } 
    <!DOCTYPE html> 
    <html> 
        <head> 
        <title>FileUpload - Single-File Example</title> 
        </head> 
        <body> 
        <h1>FileUpload - Single-File Example</h1> 
        @FileUpload.GetHtml( 
            initialNumberOfFiles:1, 
            allowMoreFilesToBeAdded:false, 
            includeFormTag:true, 
            uploadText:"Upload") 
        @if (IsPost) { 
            <span>File uploaded!</span><br/> 
        } 
        </body> 
    </html>

    V těle stránky je s použitím pomocné třídy FileUpload (Nahrání souboru) vytvořeno pole pro nahrání souboru s tlačítky, které nejspíš dobře znáte.

    ch8files-7

    Vlastnosti, které jsme u pomocné třídy FileUpload nastavili, určují, že chceme jedno pole pro nahrání souboru a že chceme, aby tlačítko pro odeslání mělo titulek Upload (Nahrát). (Více polí přidáme v další části této kapitoly.)

    Když uživatel klikne na tlačítko Upload (Nahrát), kód v horní části stránky získá soubor a uloží jej. Objekt Request (Požadavek), pomocí kterého obvykle získáváte hodnoty z polí formuláře, poskytuje také pole Files (Soubory) obsahující nahraný soubor (nebo soubory). Můžete získat jednotlivé soubory na konkrétní pozici v poli — například pro získání prvního nahraného souboru použijte výraz Request.Files[0], pro získání druhého souboru výraz Request.Files[1] atd. (Pamatujte, že při programování obvykle počítáme od nuly.)

    Po získání nahraného souboru jej vložíme do proměnné (v našem příkladu uploadedFile), abychom s ním mohli manipulovat. Název nahraného souboru je možné zjistit pomocí vlastnosti FileName (Název souboru). Když uživatel na server nahraje soubor, vlastnost FileName bude obsahovat původní uživatelův název včetně úplné cesty. Může vypadat například takto:

    C:\Users\Public\Sample.txt

    Všechny tyto informace o cestě ale nepotřebujeme, protože se nejedná o cestu na serveru, ale v počítači uživatele. Potřebujeme pouze samotný název souboru (Sample.txt). Vyjmout z cesty pouze soubor můžeme pomocí metody Path.GetFileName (Cesta.Získat název souboru), a sice takto:

    Path.GetFileName(uploadedFile.FileName)

    Objekt Path (Cesta) je nástroj poskytující řadu podobných metod, pomocí nichž je možné oddělit cesty, sloučit cesty atd.

    Jakmile získáme název nahraného souboru, můžeme vytvořit novou cestu pro uložení nahraného souboru na webu. V tomto případě novou cestu vytvoříme spojením výsledku volání metody Server.MapPath, názvů složek (App_Data/UploadedFiles) a nyní odděleného názvu souboru. Poté můžeme volat metodu SaveAs (Uložit jako) nahraného souboru, abychom provedli vlastní uložení souboru.

  5. Spusťte stránku v prohlížeči.

    ch8files-8

  6. Klikněte na tlačítko Browse (Procházet) a poté vyberte soubor, který chcete nahrát.

    ch8files-9

    Textové pole vedle tlačítka Browse (Procházet) bude obsahovat cestu a umístění souboru.

    ch8files-10

  7. Klikněte na tlačítko Upload (Nahrát).
  8. Na webu klikněte pravým tlačítkem na složku projektu a pak klikněte na příkaz Refresh (Aktualizovat).
  9. Otevřete složku UploadedFiles (Nahrané soubory). Složka bude obsahovat soubor, který jste nahráli.

    ch8files-11

Poskytnutí možnosti nahrát více souborů

V předcházejícím příkladu jsme uživatelům poskytli možnost nahrát jeden soubor. S použitím pomocné třídy FileUpload (Nahrání souboru) lze ale nahrát současně více než jeden soubor. To je užitečné v situacích jako například nahrávání fotografií, kdy nahrávat soubory po jednom by bylo zdlouhavé. (O nahrávání fotografií se dočtete v kapitole 9 – Práce s obrázky.) Tento příklad ukazuje, jak uživatelům poskytnout možnost nahrát dva soubory současně, ale s použitím stejné techniky je možné nahrát ještě více souborů.

  1. Pokud jste ji ještě nepřidali, přidejte na svůj web knihovnu pomocných webových tříd ASP.NET tak, jak popisuje kapitola 1 – Začínáme se sadou WebMatrix a webovými stránkami ASP.NET.
  2. Vytvořte novou stránku s názvem FileUploadMultiple.cshtml.
  3. Stávající kód značkovacího jazyka ve stránce nahraďte následujícím kódem:
     
    @{ 
      var message = ""; 
      if (IsPost) { 
          var fileName = ""; 
          var fileSavePath = ""; 
          int numFiles = Request.Files.Count; 
          int uploadedCount = 0; 
          for(int i =0; i < numFiles; i++) { 
              var uploadedFile = Request.Files[i]; 
              if (uploadedFile.ContentLength > 0) { 
                  fileName = Path.GetFileName(uploadedFile.FileName); 
                  fileSavePath = Server.MapPath("/App_Data/UploadedFiles/" + 
                    fileName); 
                  uploadedFile.SaveAs(fileSavePath); 
                  uploadedCount++; 
              } 
           } 
           message = "File upload complete. Total files uploaded: " + 
             uploadedCount.ToString(); 
       } 
    } 
    <!DOCTYPE html> 
    <html> 
        <head><title>FileUpload - Multiple File Example</title></head> 
    <body> 
        <form id="myForm" method="post" 
           enctype="multipart/form-data" 
           action=""> 
        <div> 
        <h1>File Upload - Multiple-File Example</h1> 
        @if (!IsPost) { 
            @FileUpload.GetHtml( 
                initialNumberOfFiles:2, 
                allowMoreFilesToBeAdded:true, 
                includeFormTag:true, 
                addText:"Add another file", 
                uploadText:"Upload") 
            } 
        <span>@message</span> 
        </div> 
        </form> 
    </body> 
    </html>

    V tomto příkladu je pomocná třída FileUpload (Nahrání souboru) v těle stránky nakonfigurována tak, aby uživatelé mohli ve výchozím nastavení nahrát dva soubory. Protože parametr allowMoreFilesToBeAdded (povolit přidání více souborů) je nastaven na hodnotu true, pomocná třída vykreslí odkaz umožňující uživatelům přidat další pole pro nahrání souborů:

    ch8files-12

    Pro zpracování souborů nahraných uživatelem kód používá stejnou základní techniku, jakou jsme použili v předchozím příkladu – získá soubor z pole Request.Files a poté jej uloží. (Včetně provedení všeho potřebného pro získání správného názvu souboru a cesty.) Změna spočívá v tom, že uživatelé mohou nahrávat více souborů a my nevíme kolik. Zjistíme to pomocí vlastnosti Request.Files.Count (Požadavek.Soubory.Počet).

    Jakmile budeme znát toto číslo, můžeme ve smyčce procházet polem Request.Files, postupně získat jednotlivé soubory a uložit je. Když víme, kolikrát chceme smyčku opakovat, můžeme takto použít smyčku for:

    for(int i =0; i < numFiles; i++) { 
        var uploadedFile = Request.Files[i]; 
        if (uploadedFile.ContentLength > 0) { 
            fileName = Path.GetFileName(uploadedFile.FileName); 
     
        // atd. 
    }

    Proměnná i je pouze dočasný čítač, který narůstá od nuly až po nastavený horní limit. V tomto případě je horním limitem počet souborů. Ale protože čítač začíná na nule, jak tomu obvykle u technologie ASP.NET při počítání bývá, je horním limitem ve skutečnosti počet souborů minus jedna. (Pokud jsou nahrány tři soubory, čítač nabývá hodnoty od nuly do dvou.)

    Proměnná uploadedCount (počet nahraných souborů) uchovává celkový počet všech souborů, které byly úspěšně nahrány a uloženy. Tento kód počítá také s možností, že očekávaný soubor nebylo možné nahrát.

  4. Spusťte stránku v prohlížeči. Prohlížeč zobrazí stránku a její dvě pole pro nahrání souborů.
  5. Vyberte dva soubory, které chcete nahrát.
  6. Klikněte na odkaz Add another file (Přidat další soubor). Stránka zobrazí nové pole pro nahrání souboru.

    ch8files-13

  7. Klikněte na tlačítko Upload (Nahrát).
  8. Na webu klikněte pravým tlačítkem na složku projektu a pak klikněte na příkaz Refresh (Aktualizovat).
  9. Otevřete složku UploadedFiles (Nahrané soubory), ve které uvidíte úspěšně nahrané soubory.

Další materiály

Kapitola 9 – Práce s obrázky

Export do souboru CSV

Referenční příručka pro webové stránky ASP.NET se syntaxí Razor