Come caricare un file a un server Web in ASP.NET utilizzando Visual C# .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 323246 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene descritto come caricare un file in un server Web utilizzando Visual C#. NET. In questo articolo, Ŕ possibile creare un file di Microsoft ASP.NET (WebForm1.aspx) e il file code-behind correlato (WebForm1.aspx.cs) per caricare file in una directory denominata dati.


Creare un'applicazione ASP.NET

In Microsoft Visual Studio. NET, attenersi alla seguente procedura per creare una nuova applicazione di caricare file sul server Web:
  1. Avviare Microsoft Visual Studio .NET.
  2. Scegliere Nuovo dal menu file , quindi progetto .
  3. Nella finestra di dialogo Nuovo progetto scegliere Progetti di Visual C# in Tipi progetto , quindi Applicazione Web ASP.NET in modelli .
  4. Nella casella percorso digitare l'URL per creare il progetto. In questo esempio, digitare http://localhost/CSharpUpload , che crea il nome di progetto predefinito di CSharpUpload. Si noti che il file WebForm1.aspx viene caricato nella visualizzazione Progettazione di Visual Studio. NET.

Creare la directory dei dati

Dopo aver creato l'applicazione, Ŕ necessario creare la directory Data che accetta file caricati. Dopo aver creato la directory, Ŕ inoltre necessario impostare autorizzazioni di scrittura per l'account di lavoro ASPNET.
  1. Nella finestra Esplora soluzioni di Visual Studio. NET, fare clic con il pulsante destro del mouse su CSharpUpload , scegliere Aggiungi e quindi scegliere Nuova cartella . Per impostazione predefinita, viene creata una nuova cartella denominata nuova Cartella1.
  2. Per modificare il nome della cartella Data, fare clic con il pulsante destro del mouse sulla nuova Cartella1 , fare clic su Rinomina e quindi digitare dati .
  3. Avviare Esplora risorse e quindi individuare la cartella sistema di file di dati creato nel passaggio 2. Per impostazione predefinita, questa cartella si trova nella seguente cartella:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. Per modificare la protezione le impostazioni per concedere scrivere autorizzazioni della directory Data, fare clic con il pulsante destro del mouse su dati e scegliere ProprietÓ .
  5. Nella finestra di dialogo ProprietÓ di data , fare clic sulla scheda protezione e scegliere Aggiungi .
  6. Nella finestra di dialogo Seleziona utenti o gruppi selezionare l'account ASPNET e scegliere Aggiungi . Fare clic su OK per chiudere la finestra di dialogo Seleziona utenti o gruppi .
  7. Fare clic sul account aspnet_wp (computername \ASPNET) account e quindi per selezionare le caselle di controllo Consenti per le autorizzazioni seguenti:

    • lettura ed esecuzione
    • Visualizza contenuto cartella
    • lettura
    • scrivere

    Fare clic per deselezionare le eventuali altre caselle di controllo Consenti e Nega .
  8. Fare clic su OK per chiudere la finestra di dialogo ProprietÓ dati . ╚ stato modificato correttamente le autorizzazioni directory dati per accettare i file utente caricato.

Modificare la pagina WebForm1.aspx

Per modificare il codice HTML del file WebForm1.aspx per consentire agli utenti di caricare file, attenersi alla seguente procedura:
  1. Tornare all'istanza aperta di Visual Studio. NET. WebForm1.aspx dovrebbe essere ancora aperta nella finestra di progettazione.
  2. Per visualizzare l'origine HTML della pagina WebForm1.aspx, fare clic con il pulsante destro del mouse WebForm1.aspx nella finestra di progettazione e quindi scegliere Origine HTML .
  3. Individuare il codice HTML riportato di seguito, che contiene il tag <form>:
    <form id="Form1" method="post" runat="server">
    					
  4. Aggiungere il enctype = "multipart/form-data" nome / valore attributo nel tag <form> nel modo seguente:
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    					
  5. Dopo l'apertura <form> tag, aggiungere il codice riportato di seguito:
    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    					
  6. Verificare che il codice HTML <form> tag viene visualizzato come segue:
    <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>
    					

Aggiungere il codice di caricamento al file di code-behind WebForm1.aspx.cs

Per modificare il file di code-behind di WebForm1.aspx.cs in modo che accetti i dati caricati, attenersi alla seguente procedura:
  1. Nel menu Visualizza , fare clic su struttura .
  2. Fare doppio clic su Carica . Viene aperto il file code-behind WebForm1.aspx.cs di Visual Studio e genera automaticamente il seguente codice di metodo:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    
    
    }
  3. Verificare che il codice riportato di seguito esista a livello di classe del file WebForm1.cs:
    protected System.Web.UI.HtmlControls.HtmlInputFile File1;
    protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;
    						
    se questo codice non esiste nel file, aggiungere il codice nel file dopo la seguente riga:
    public class WebForm1 : System.Web.UI.Page
    {
    					
  4. Individuare il seguente codice:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    					
  5. Premere INVIO per aggiungere una riga vuota e quindi aggiungere il codice riportato di seguito:
    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.");
    }
    questo codice verifica prima che un file Ŕ stato caricato. Se non Ŕ stato selezionato alcun file, riceverai il messaggio "Selezionare un file da caricare". Se viene caricato un file valido, il nome del file viene estratto utilizzando lo spazio dei nomi System.IO e la destinazione Ŕ stata creata in un percorso SaveAs . Una volta che Ŕ noto che la destinazione finale, il file viene salvato utilizzando il metodo File1.PostedFile.SaveAs . Qualsiasi eccezione viene intercettata, e il messaggio di eccezione viene visualizzato sullo schermo.
  6. Verificare che la subroutine Submit1 venga visualizzato come segue:
    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.");
    	}
    }

Test dell'applicazione

Per generare la soluzione di Visual Studio .NET e testare l'applicazione, attenersi alla seguente procedura:
  1. Dal menu Genera scegliere Genera soluzione .
  2. In Esplora soluzioni, fare clic con il pulsante destro del mouse su WebForm1.aspx e quindi scegliere Visualizza nel browser .
  3. Dopo avere WebForm1.aspx nel browser, scegliere Sfoglia .
  4. Nella finestra di dialogo Scegli File , selezionare un file che Ŕ minore di 4 megabyte (MB) e quindi fare clic su Apri .
  5. Per caricare il file, scegliere Carica . Si noti che il file carica in tale server e che sia visualizzato il messaggio "Ŕ stato caricato il file".
  6. Tornare all'istanza aperta di Esplora risorse e individuare la directory dati.
  7. Verificare che il file Ŕ stato caricato i dati di directory.

Caricare il file di dimensioni maggiori

Per impostazione predefinita, ASP.NET consente solo i file 4.096 kilobyte (KB) (o 4 MB) o meno da caricare sul server Web. Per caricare il file di dimensioni maggiori, Ŕ necessario modificare il parametro maxRequestLength del <httpruntime> sezione del file Web.config.

Nota Quando l'attributo maxRequestLength Ŕ impostata nel file Machine.config e quindi viene inviata una richiesta (ad esempio, un caricamento di file) che supera il valore di maxRequestLength , una pagina di errore personalizzato non pu˛ essere visualizzata. In alternativa, Microsoft Internet Explorer visualizzerÓ un messaggio di errore "Impossibile trovare il server o DNS".

Se si desidera modificare questa impostazione per tutti i computer e non solo l'applicazione ASP.NET, Ŕ necessario modificare il file Machine.config file.

Per impostazione predefinita, il <httpruntime> elemento Ŕ impostato sui seguenti parametri nel file Machine.config file:
<httpRuntime 
executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>
				
file Machine.config di si trova nel \ System Root \Microsoft.NET\Framework\ Version Number \Config directory.


Elenco completo del codice

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>
				

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.");
			}
		}
	}
}
	

Informazioni

In teoria, la dimensione di caricamento di file massima Ŕ abbastanza grande. Causa del monitoraggio dello stato ASP.NET, tuttavia, non Ŕ possibile caricare file molto grandi in ASP.NET. Il processo di lavoro di ASP.NET dispone di un spazio di indirizzi virtuali di 2 gigabyte (GB). Tuttavia, il processo di lavoro ASP.NET utilizza solo poco pi¨ di 1 GB a causa di frammentazione di monitoraggio e la memoria dello stato.

Durante il processo di caricamento, ASP.NET carica l'intero file in memoria prima che l'utente Ŕ possibile salvare il file sul disco. Di conseguenza, Ŕ possibile che il processo venga riciclato a causa dell'attributo memoryLimit di tag processModel nel file Machine.config. L'attributo memoryLimit specifica la percentuale di memoria fisica, processo di lavoro di ASP.NET pu˛ esaurire prima che il processo venga riciclato automaticamente. Il riciclo impedisce che le perdite di memoria causa l'arresto anomalo o il blocco di ASP.NET.

Inoltre, altri fattori svolgono un ruolo della dimensione massima dei file che pu˛ essere caricato. Questi fattori includono la memoria disponibile, lo spazio disponibile sul disco rigido, velocitÓ del processore e il traffico di rete corrente. Regolare il traffico di file caricati, Microsoft consiglia di utilizzare dimensioni massime del file in un intervallo di 10 a 20 megabyte (MB). Se Ŕ raramente caricare file, Ŕ possibile che le dimensioni massime del file possibile 100 MB.

Nota ╚ possibile caricare file di dimensioni superiori a 100 MB in ASP.NET. Tuttavia, Microsoft consiglia di seguire le dimensioni massime caricamento citate in questo articolo. Per determinare le dimensioni dei file pi¨ precisi, eseguire test su computer simili a quelli che verranno utilizzati nell'ambiente di produzione di stress.

╚ possibile notare i seguenti messaggi di errore se si verificano i limiti di dimensione dei file durante il processo di caricamento dei file:
  • Impossibile visualizzare la pagina.
  • Applicazione server non Ŕ disponibile
    Nel registro eventi richiede che il messaggio di errore sarÓ simile al seguente:

    aspnet_wp.exe (PID: PIDNumber) Ŕ stato riciclato perchÚ consumo di memoria superava SizeLimit MB (% Percentage della RAM disponibile).

  • Generata eccezione di tipo System.OutOfMemoryException.
╚ probabile che il caricamento si verifica molto lentamente. Se si guarda il processo di aspnet_wp.exe in Windows Task Manager, si noterÓ che il delta di memoria cambia di 64 KB ogni secondi 1 a 2. In base la dimensione del file, questo ritardo pu˛ provocare il riciclare causa di un errore responseDeadlock il processo di lavoro ASP.NET.

Riferimenti

Per ulteriori informazioni, visitare i seguenti Microsoft Developer Network (MSDN) siti Web;
elemento <httpruntime>
http://msdn2.microsoft.com/en-us/library/e1f13641(vs.71).aspx

Elemento INPUT | oggetto di input
http://msdn.microsoft.com/en-us/library/ms535260(VS.85).aspx

Attributo ENCTYPE | proprietÓ enctype
http://msdn2.microsoft.com/en-us/library/ms533745.aspx

Classe HtmlInputFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile(vs.71).aspx

ProprietÓ HtmlInputFile.PostedFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile.postedfile(vs.71).aspx

ProprietÓ

Identificativo articolo: 323246 - Ultima modifica: lunedý 21 maggio 2007 - Revisione: 5.11
Le informazioni in questo articolo si applicano a:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Chiavi:á
kbmt kbhowtomaster KB323246 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 323246
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com