Upload souborů na server pomocí ASP.NET
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.
Mohlo by vás také zajímat
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Vaše pošta může být špatně nastavena – svěřte ji profesionálům
13. července 2023 -
Znovuuvedení domény .AD
5. září 2024 -
Zvýšení výkonu WiFi signálu: Jak a proč používat WiFi zesilovače
28. června 2023
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024