Jak nahrát soubor na webový server v technologii ASP.NET pomocí aplikace Visual C# .NET

Souhrn

Tento podrobný článek popisuje, jak k nahrání souboru na webový server pomocí aplikace Visual C# .NET. V tomto článku vytvořte soubor Microsoft ASP.NET (WebForm1.aspx) a jeho související soubor kódu (WebForm1.aspx.cs) předávat soubory do adresář s názvem Data.

zpět na horní

Vytvořte aplikaci technologie ASP.NET

V aplikaci Microsoft Visual Studio .NET postupujte takto Chcete-li vytvořit novou aplikaci, chcete-li odeslat soubory na webový server:
  1. Spusťte aplikaci Visual Studio .NET.
  2. V nabídce soubor přejděte na příkaz Nový a klepněte na příkaz projekt.
  3. V dialogovém okně Nový projekt klepněte na tlačítko Projekty Visual C# v části Typy projektua klepněte na Webovou aplikaci ASP.NET v části šablony.
  4. Do pole umístění zadejte adresu URL pro vytvoření projektu. V tomto příkladu zadejte
    http://localhost/CSharpUpload, který vytvoří výchozí název projektu CSharpUpload. Všimněte si, že souboru WebForm1.aspx je načten v zobrazení návrháře sady Visual Studio .NET.
zpět na horní

Vytvoření datového adresáře

Po vytvoření aplikace vytvoříte datový adresář, který bude přijímat soubory. Po vytvoření tohoto adresáře, musíte také nastavit oprávnění pro účet ASPNET pracovníka k zápisu.
  1. V okně Průzkumník řešení sady Visual Studio .NET klepněte pravým tlačítkem myši CSharpUpload, přejděte na příkaz Přidata potom klepněte na tlačítko Nová složka. Ve výchozím nastavení je vytvořena nová složka s názvem NewFolder1.
  2. Chcete-li změnit název složky Data, klepněte pravým tlačítkem myši NewFolder1, klepněte na příkaz Přejmenovata potom zadejte Data.
  3. Spusťte Průzkumníka Windows a vyhledejte složku systému datového souboru, který jste vytvořili v kroku 2. Ve výchozím nastavení je složka umístěna v následující složce:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. Chcete-li změnit zabezpečení zápisu nastavení udělit oprávnění k adresáři dat datklepněte pravým tlačítkem myši a potom klepněte na příkaz Vlastnosti.
  5. V dialogovém okně Vlastnosti Data klepněte na kartu zabezpečení a potom klepněte na tlačítko Přidat.
  6. V dialogovém okně Vyberte uživatele nebo skupiny klepněte na účet ASPNET a potom klepněte na tlačítko Přidat. Klepněte na tlačítko OK zavřete dialogové okno Vyberte uživatele nebo skupiny .
  7. Klepněte aspnet_wp účtu (název_počítače\ASPNET) účet a potom klepněte na tlačítko zaškrtněte políčka Povolit pro následující oprávnění:

    • Číst a spouštět
    • Zobrazovat obsah složky
    • Pro čtení
    • Zápis

    Klepnutím zrušte zaškrtnutí všech ostatních Povolit a Odepřít zaškrtávací políčka.
  8. Klepněte na tlačítko OK zavřete dialogové okno Vlastnosti Data . Úspěšně jste změnili oprávnění k adresáři dat přijímat soubory odeslat uživatele.
zpět na horní

Upravit stránku WebForm1.aspx

Chcete-li upravit kód HTML souboru WebForm1.aspx povolení uživatelům odesílat soubory, postupujte takto:
  1. Vraťte se do otevřené instance aplikace Visual Studio .NET. V okně Návrhář by měla být otevřená WebForm1.aspx.
  2. Chcete-li zobrazit zdrojový kód HTML WebForm1.aspx stránky, klepněte pravým tlačítkem myši WebForm1.aspx v okně Návrhář a potom klepněte na tlačítko Zobrazit zdroj HTML.
  3. Vyhledejte následující kód HTML, který obsahuje značky < form >:
    <form id="Form1" method="post" runat="server">
  4. Přidat enctype = "multipart/formulář data" název hodnota atributu značky < form > následujícím způsobem:
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
  5. Za značku < form > otevírání přidejte následující kód:
    <INPUT type=file id=File1 name=File1 runat="server" /><br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />

  6. Ověřte, zda značku HTML < form > takto:
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server"><INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    </form>

zpět na horní

Přidat kód uložit do souboru WebForm1.aspx.cs kódem na pozadí

Chcete-li upravit soubor WebForm1.aspx.cs kódem na pozadí, takže přijímá odesílaná data, postupujte takto:
  1. V nabídce Zobrazit klepněte na tlačítko Návrh.
  2. Poklepejte na položku Odeslat. Visual Studio otevře soubor WebForm1.aspx.cs kódem na pozadí a automaticky generuje následující kód metody:
    private void Submit1_ServerClick(object sender, System.EventArgs e){


    }
  3. Ověřte, zda existuje následující kód na úrovni třídy souboru WebForm1.cs:
    protected System.Web.UI.HtmlControls.HtmlInputFile File1;protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;

    Pokud tento kód v souboru neexistuje, přidejte kód do souboru po následující řádek:
    public class WebForm1 : System.Web.UI.Page{

  4. Vyhledejte následující kód:
    private void Submit1_ServerClick(object sender, System.EventArgs e){

  5. Stisknutím klávesy ENTER přidat prázdný řádek a poté přidejte následující kód:
    if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) ){
    string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    string SaveLocation = Server.MapPath("Data") + "\\" + fn;
    try
    {
    File1.PostedFile.SaveAs(SaveLocation);
    Response.Write("The file has been uploaded.");
    }
    catch ( Exception ex )
    {
    Response.Write("Error: " + ex.Message);
    //Note: Exception.Message returns a detailed message that describes the current exception.
    //For security reasons, we do not recommend that you return Exception.Message to end users in
    //production environments. It would be better to put a generic error message.
    }
    }
    else
    {
    Response.Write("Please select a file to upload.");
    }
    Tento kód nejprve ověří, že soubor byl odeslán. Pokud byl vybrán žádný soubor, zobrazí se zpráva "Vyberte soubor k odeslání". Pokud platný soubor je odeslán, jeho název je extrahován pomocí oboru názvů System.IO a jeho cíl je sestaven v cestě SaveAs . Po konečné místo určení je znám, je soubor uložen pomocí metody File1.PostedFile.SaveAs . Je jakákoli výjimka zachycena a na obrazovce se zobrazí zpráva o výjimce.
  6. Ověřte, zda Submit1 podprogram takto:
    private void Submit1_ServerClick(object sender, System.EventArgs e){
    if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
    {
    string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    string SaveLocation = Server.MapPath("Data") + "\\" + fn;
    try
    {
    File1.PostedFile.SaveAs(SaveLocation);
    Response.Write("The file has been uploaded.");
    }
    catch ( Exception ex )
    {
    Response.Write("Error: " + ex.Message);
    //Note: Exception.Message returns detailed message that describes the current exception.
    //For security reasons, we do not recommend you return Exception.Message to end users in
    //production environments. It would be better just to put a generic error message.
    }
    }
    else
    {
    Response.Write("Please select a file to upload.");
    }
    }
zpět na horní

Testování aplikace

Pro sestavení řešení sady Visual Studio .NET a testovat aplikace, postupujte takto:
  1. V nabídce sestavení klepněte na tlačítko Sestavit řešení.
  2. V Průzkumníku řešení klikněte pravým tlačítkem myši WebForm1.aspxa potom klepněte na tlačítko Zobrazit v prohlížeči.
  3. Po WebForm1.aspx otevře v prohlížeči, klepněte na tlačítko Procházet.
  4. V dialogovém okně Vybrat soubor vyberte soubor, který je menší než 4 megabajty (MB) a potom klepněte na tlačítko Otevřít.
  5. Chcete-li odeslat soubor, klepněte na možnost Odeslat. Všimněte si, že soubor uloží na webový server a zobrazí se zpráva "soubor byl odeslán".
  6. Vraťte se do otevřené instance programu Průzkumník Windows a vyhledejte datový adresář.
  7. Ověřte, že soubor byl odeslán do datového adresáře.
zpět na horní

Odeslání větších souborů

Ve výchozím nastavení, technologie ASP.NET umožňuje pouze soubory, které jsou 4 096 kilobajtů (KB) (nebo 4 MB) nebo méně být odeslány na webový server. Chcete-li odeslat soubory větší, je nutné změnit maxRequestLength parametr oddíl < httpRuntime > v souboru Web.config.

Poznámka: Když maxRequestLength atribut byl nastaven v souboru Machine.config a zaúčtovali požadavek (například nahrání souboru), který překračuje hodnotu maxRequestLength, vlastní chybovou stránku nelze zobrazit. Místo toho aplikace Microsoft Internet Explorer se zobrazí chybová zpráva "Nelze najít server nebo DNS".

Pokud chcete změnit toto nastavení pro všechny počítače, a nikoli pouze v této aplikaci technologie ASP.NET, je nutné upravit soubor Machine.config.

Ve výchozím prvku < httpRuntime > nastavte následující parametry v souboru Machine.config:
<httpRuntime executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>

Soubor Machine.config je umístěn v \System Root\Microsoft.NET\Framework\Číslo verze\CONFIG directory.

zpět na horní

Úplný výpis kódu

WebForm1.aspx

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CSharpUpload.WebForm1" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name=vs_defaultClientScript content="JavaScript">
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" enctype="multipart/form-data" runat="server">
<INPUT type=file id=File1 name=File1 runat="server" >
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" NAME="Submit1">
</form>


</body>
</HTML>

zpět na horní

WebForm1.aspx.cs

using System;using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace CSharpUpload
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlInputFile File1;
protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Submit1.ServerClick += new System.EventHandler(this.Submit1_ServerClick);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Submit1_ServerClick(object sender, System.EventArgs e)
{
if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
{
string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
string SaveLocation = Server.MapPath("Data") + "\\" + fn;
try
{
File1.PostedFile.SaveAs(SaveLocation);
Response.Write("The file has been uploaded.");
}
catch ( Exception ex )
{
Response.Write("Error: " + ex.Message);
//Note: Exception.Message returns a detailed message that describes the current exception.
//For security reasons, we do not recommend that you return Exception.Message to end users in
//production environments. It would be better to return a generic error message.
}
}
else
{
Response.Write("Please select a file to upload.");
}
}
}
}

zpět na horní

Další informace

Teoreticky je maximální nahrávání velikost souboru velmi velké. Však kvůli monitorování stavu technologie ASP.NET nelze odeslat velké soubory technologie ASP.NET. Pracovní proces ASP.NET byl virtuálního adresového prostoru 2 gigabajty (GB). Pracovní proces ASP.NET však používá pouze o něco více než 1 GB z důvodu fragmentace zdraví sledování a paměť.


Během procesu odesílání ASP.NET načte celý soubor do paměti dříve, než může uživatel uložit soubor na disk. Proces tedy může recyklovat z důvodu memoryLimit atribut processModel značka v souboru Machine.config. MemoryLimit atribut určuje procento fyzické paměti, které technologie ASP.NET pracovní proces může výfukových plynů proces recyklován automaticky. Recyklace zabrání nevracení paměti způsobí ASP.NET selhání nebo přestane reagovat.

Kromě toho další faktory hrají roli v maximální velikost souboru, který lze odeslat. Tyto faktory zahrnují dostupná paměť, volného místa na disku, rychlost procesoru a aktuální síťové přenosy. Pravidelné přenosy souborů odesílaných společnosti Microsoft doporučuje použít maximální velikost souboru v rozsahu 10 až 20 megabajtů (MB). Pokud odešlete zřídka soubory, maximální velikost souboru může být 100 MB.

Poznámka: Můžete uložit soubory, které jsou větší než 100 MB v technologii ASP.NET. Společnost Microsoft doporučuje postupujte podle velikosti maximální nahrávání, které jsou zmíněny v tomto článku. Chcete-li zjistit velikost souboru je přesnější, proveďte zátěžové testování v počítačích, které jsou podobné jako ty, které budou použity při výrobě.

Můžete si všimnout následujících chybových zpráv, pokud dojde k omezení velikosti souboru během procesu ukládání souboru:
  • Stránku nelze zobrazit.
  • Serverová aplikace není k dispozici
    V protokolu událostí bude chybová zpráva podobná následující:
  • Byla vyvolána výjimka typu System.OutOfMemoryException.
Můžete nalézt také nahrávání dochází velmi pomalu. Pokud sledujete Aspnet_wp.exe proces ve Správci úloh systému Windows, zjistíte, že rozdíl využití paměti se změní podle 64 KB každé 1 až 2 sekundy. V závislosti na velikosti souboru toto zpoždění může způsobit chyby responseDeadlock recyklovat pracovní proces ASP.NET.
Vlastnosti

ID článku: 323246 - Poslední kontrola: 16. 1. 2017 - Revize: 1

Váš názor