Upload souborů na server pomocí ASP.NET

16. října 2002

Potřebujete ukládat soubory na web a nechcete nebo dokonce nemůžete k tomu používat FTP klienta? V .NET existuje jednoduchý způsob, jak dostat soubor na web pomocí www rozhraní. V dnešním článku se dozvíte, jak takové rozhraní vytvořit.

Nejdříve si vytvoříme formulář, který bude obsahovat HTML prvek File, kterému nesmíme zapomenout nastavit atribut runat=“Server“ a odesílací tlačítko (prvek Button), na které navážeme funkci, která provede zpracování požadavku a uložení souboru. Pro informaci o výsledku činnosti při ukládání souboru nám poslouží prvek Label, který budeme během činnosti modifikovat. Při tvorbě je nutné ještě samotnému prvku <form> nastavit atribut enctype = „multipart/form-data“.

Celý formulář uložíme do souboru default.aspx, který pak bude vypadat takto :

<%@ Page language=“c#“ Codebehind=“default.aspx.cs“ AutoEventWireup=“false“ Inherits=“upload.WebForm1″ %>
<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“ >
<HTML>
<HEAD>
<title>Upload souboru na server</title>
<meta content=“Microsoft Visual Studio 7.0″ name=“GENERATOR“>
<meta content=“C#“ name=“CODE_LANGUAGE“>
<meta content=“JavaScript“ name=“vs_defaultClientScript“>
<meta content=“http://schemas.microsoft.com/intellisense/ie5″ name=“vs_targetSchema“>
</HEAD>
<body MS_POSITIONING=“GridLayout“>
<form id=“Form1″ method=“post“ encType=“multipart/form-data“ runat=“server“>
 <asp:button id=“uloz_soubor“ style=“Z-INDEX: 101; LEFT: 272px; POSITION: absolute; TOP: 17px“ runat=“server“ Text=“Ulož na server“></asp:button>
<INPUT id=“Soubor“ style=“Z-INDEX: 102; LEFT: 14px; POSITION: absolute; TOP: 17px“ type=“file“ runat=“server“ NAME=“Soubor“>
<asp:Label id=“Status“ style=“Z-INDEX: 103; LEFT: 17px; POSITION: absolute; TOP: 50px“ runat=“server“ Height=“90px“ Width=“376px“></asp:Label>
</form>
</body>
</HTML>

Při tvorbě tohoto formuláře pomocí Visual Studia .NET zjistíte (nevím jak je tomu v jiných vývojových prostředích), že mezi prvky Web Forms není prvek pro výběr souboru. Prvek pro výběr souboru najdete mezi HTML prvky. Prvku File však musíte doplnit ještě atribut runat=“server“. Pokud tak neučiníte nebude vám upload fungovat.

Tlačítku „Ulož na server“ přiřadíme funkci, ve které provedeme zpracování souboru vybraného uživatelem pomocí prvku File.

private void uloz_soubor_Click(object sender, System.EventArgs e)
{

   if (Soubor.PostedFile != null) // pokud není vytvořen proud dat, nelze nic dělat
   {

      if (Soubor.PostedFile.ContentLength>0) // je velikost souboru větší než nula?
      {

         try // zkusíme tedy soubor uložit
         {
            string strFileNamePath = Soubor.PostedFile.FileName;
            int intPoziceZacatkuJmena = strFileNamePath.LastIndexOf(„\\“)+1;
            string strFileNameOnly=strFileNamePath.Remove(0,intPoziceZacatkuJmena);
            Soubor.PostedFile.SaveAs(Server.MapPath(„dta/“)+strFileNameOnly);
            Status.Text = „Soubor uspěšně uložen na server <br> Velikost souboru:“+Soubor.PostedFile.ContentLength+“<br>Soubor: „+strFileNameOnly;
            Status.ForeColor=System.Drawing.Color.Green;
         }
         catch (Exception exc) // uložení se nezdařilo, zpracujeme výjimku
         {
            Status.Text = „Chyba při ukládání“ + exc.ToString();
            Status.ForeColor=System.Drawing.Color.Red;
         }
      }
      else // velikost souboru je nulová, není co ukládat
      {
         Status.Text = „Není co ukládat“;
         Status.ForeColor=System.Drawing.Color.Red;
      }
   }
}

Velikost souboru pod kontrolou

Určitě se nechcete dostat do situace, že by mohl každý poslat neomezeně velký soubor na server. Naštěstí na toto .NET Framework pamatuje a velikost přenášených dat lze omezit již v souboru machine.config. Pro změnu velikosti přenesených dat v rámci jednoho http požadavku stačí pouze změnit v  elementu httpRuntime v sekci <system.web> atribut maxRequestLength (výchozí hodnota je 4096 kB).

Standardní nastavení elementu httpRuntime:

<httpRuntime executionTimeout=“90″
maxRequestLength=“4096″
useFullyQualifiedRedirectUrl=“false“
minFreeThreads=“8″
minLocalRequestFreeThreads=“4″ appRequestQueueLimit=“100″/>

Soubor machine.config najdete při standardní instalaci v adresáři
%SystemRoot%\Microsoft.NET\Framework\v1.0.3705\CONFIG přičemž v1.0.3705 je označení verze .NET Frameworku.

Více informací o elementu httpRuntime najdete v  MSDN

Pokud však nemáte k souboru machine.config přístup (například na webhostingu), můžete tu samou změnu provést v souboru web.config, který najdete v kořeni vaší aplikace. Změny provedené v souboru web.config však narozdíl od souboru machine.config ovlivňují pouze vaší web aplikaci).

Jestliže se nyní pokusíte poslat na server soubor, který bude větší, než povolená velikost, obdržíte chybovou stránku:

Uživatelé pod kontrolou

Jistě nebudete chtít, aby soubory na web mohl nahrávat kdokoli. V tomto případě je vhodné přístup k této stránce zabezpečit. Jak takovéto zabezpečení udělat, najdete v článku Jak zabezpečit aplikaci v ASP.NET.

Konfigurační soubory můžete editovat buď ručně anebo použít Editor konfiguračních souborů .NET.

Kompletní zdrojové kódy jsou samozřejmně k dispozici.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Předchozí článek tiptrading.cz
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *