Как загрузить файл на веб-сервере в ASP.NET с помощью Visual C#.NET

Переводы статьи Переводы статьи
Код статьи: 323246 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Эта статья содержит пошаговые инструкции для загрузки файла в веб-сервер с помощью Visual C#.NET. В этой статье Создание Microsoft ASP.NET file (файл WebForm1.aspx) и связанные с выделенным кодом файла (WebForm1.aspx.cs), чтобы загружать файлы в каталог с именем Данные.


Создание веб-приложения ASP.NET приложения

В Microsoft Visual Studio.NET, выполните указанные ниже действия для создания новое приложение для загрузки файлов на веб-сервере:
  1. Запустите Microsoft Visual Studio.NET.
  2. На Файл Выберите пункт Новый, а затем нажмите кнопку Проект.
  3. В Новый проект диалоговое окно, нажмите кнопку Проекты Visual C# Из списка Типы проектов, а затем нажмите кнопку ASP.NET веб-приложения Из списка Шаблоны.
  4. В Расположение Введите URL-адрес для создания проекта. Например введитеhttp://localhost/CSharpUpload, который создает по умолчанию имя проекта CSharpUpload. Обратите внимание, что загружает файл WebForm1.aspx в Представление конструктора Visual Studio.NET.

Создание каталога данных

После создания приложения, создание каталога данных который будет принимать загруженные файлы. После создания этого каталога, необходимо также выполнить задать разрешения на запись для учетной записи ASPNET рабочего.
  1. В окне обозревателя решений Visual Studio.NET, Щелкните правой кнопкой мыши CSharpUpload, выберите пункт Добавить, а затем нажмите кнопку Новая папка. По умолчанию является новая папка с именем NewFolder1 создан.
  2. Чтобы изменить имя папки данных, щелкните правой кнопкой мыши NewFolder1, нажмите кнопку Переименование, а затем введите Данные.
  3. Запустите проводник Windows и найдите файл данных системную папку, созданную на шаге 2. По умолчанию эта папка находится в следующие папки:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. Изменить параметры для предоставления разрешения записи каталог данных щелкните правой кнопкой мыши Данные, а затем нажмите кнопку Свойства.
  5. В Свойства данных диалоговое окно, нажмите кнопку Безопасность вкладки, а затем нажмите кнопку Добавить.
  6. В Выберите пользователей или группы диалоговое окно, Перейдите на вкладку ASPNET учетную запись и нажмите кнопку Добавить. Нажмите кнопку ОК Чтобы закрыть Выберите пользователей или группы диалоговое окно поле.
  7. Нажмите кнопку (учетная запись) aspnet_wpcomputerName\ASPNET) учетная запись и выберите Разрешить флажки для следующих разрешений:

    • Чтение и выполнение
    • Список содержимого папки
    • Чтение
    • Запись

    Снимите любые другие Разрешить и Запретить флажки.
  8. Нажмите кнопку ОК Чтобы закрыть Свойства данных диалоговое окно. Успешно изменены данные каталога разрешения на прием файлов, загруженных пользователем.

Изменение страницы WebForm1.aspx

Чтобы изменить код HTML файла WebForm1.aspx, чтобы разрешить пользователям Чтобы загрузить файлы, выполните следующие действия:
  1. Вернуться в открытое окно Visual Studio.NET. WebForm1.aspx должен быть открыт в окне конструктора.
  2. Для просмотра исходного кода HTML страницы WebForm1.aspx Щелкните правой кнопкой мыши WebForm1.aspx в окне конструктора и выберите команду Просмотр исходного кода HTML.
  3. Найдите следующий код HTML, который содержит<form>тег:</form>
    <form id="Form1" method="post" runat="server">
    					
  4. Добавить Enctype = "multipart/form-data значение имени атрибута<form>тег следующим образом:</form>
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    					
  5. После открытия<form>Добавьте следующий код:</form>
    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    					
  6. Убедитесь, что HTML-код<form>тег выглядит следующим образом:</form>
    <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>
    					

Добавление кода загрузки файла с выделенным кодом WebForm1.aspx.cs

Для изменения файла с выделенным кодом WebForm1.aspx.cs так что он принимает переданные данные, выполните следующие действия:
  1. На Представление меню, нажмите кнопку Дизайн.
  2. Дважды щелкните значок Загрузить. Visual Studio открывает файл с выделенным кодом WebForm1.aspx.cs и автоматически генерирует следующий код метода:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    
    
    }
  3. Убедитесь, что существует следующий код на уровне класса файл WebForm1.cs:
    protected System.Web.UI.HtmlControls.HtmlInputFile File1;
    protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;
    						
    Если этот код в файл не существует, добавьте код в файл После следующей строки:
    public class WebForm1 : System.Web.UI.Page
    {
    					
  4. Найдите следующий код:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    					
  5. Нажмите клавишу ВВОД, чтобы добавить пустую строку, а затем добавьте следующие строки код:
    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.");
    }
    Этот код сначала проверяет, что файл был загружен. Если файл не был флажок установлен, сообщение «Выберите файл для загрузки». Если допустимый передать файл, его имя извлекается с помощью System.IO пространство имен и его назначение собирается в Сохранить как $$$$ После известно окончательное назначение, файл сохраняется с с помощью File1.PostedFile.SaveAs метод. Перехват всех исключений, и сообщение об исключении отображается на экране.
  6. Убедитесь, что Submit1 Подпрограмма выглядит следующим образом:
    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.");
    	}
    }

Тестирование приложения

Для построения Visual Studio.NET решение и тестирование приложения, выполните следующие действия:
  1. На Построение меню, нажмите кнопку Построение решения.
  2. В обозревателе решений щелкните правой кнопкой мыши WebForm1.aspx, а затем нажмите кнопку Просмотр в обозревателе.
  3. После WebForm1.aspx откроется в обозревателе, нажмите кнопку Обзор.
  4. В Выберите файл диалоговое окно, выберите файл размером менее 4 мегабайт (МБ) и выберите команду Открыть.
  5. Чтобы загрузить файл, нажмите кнопку Загрузить. Обратите внимание, что для загрузки файлов на веб-сервере и что появляется сообщение «этот файл был загружен».
  6. Вернуться в открытое окно проводника Windows, а затем Перейдите в каталог данных.
  7. Убедитесь, что файл был загружен с данными каталог.

Загрузка файлов большого размера

По умолчанию приложения ASP.NET разрешает только файлы, имеющие 4 096 килобайт (КБ) (или 4 МБ) или меньше для загрузки на веб-сервере. Для загрузки большего размера файлы, необходимо изменить maxRequestLength параметр <httpruntime></httpruntime> раздел в файле Web.config.

Примечание При maxRequestLength набор атрибутов в файле Machine.config и затем запрос учета (например, передача файлов), превышает значение элемента maxRequestLength, не удается отобразить страницу настраиваемой ошибки. Вместо этого Microsoft Internet Explorer отображает ошибку «Не удается найти сервер или DNS» сообщение.

Если вы хотите изменить этот параметр для всего компьютера и не только для данного приложения ASP.NET приложения, необходимо изменить файл Machine.config файл.

По умолчанию <httpruntime></httpruntime> элемент имеет значение следующие параметры в файле Machine.config файл:
<httpRuntime 
executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>
				
Он находится в файле Machine.config \Система Корень\Microsoft.NET\Framework\Версия НомерКаталог \Config.


Полный пример кода

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

Дополнительная информация

Теоретически максимальный размер загружаемого файла довольно велик. Однако из-за ASP.NET мониторинга, невозможно передать большой файлы в ASP.NET. ASP.NET имеет виртуальное адресное пространство 2 гигабайт (ГБ). Тем не менее ASP.NET рабочий процесс использует только немного более не менее 1 ГБ из-за фрагментации памяти и мониторинга работоспособности.

В процессе загрузки, ASP.NET загружает файл целиком в память Прежде чем пользователь может сохранить файл на диск. Таким образом процесс может повторно из-за memoryLimit атрибут processModel тег в файле Machine.config. В memoryLimit атрибут указывает процент физической памяти, ASP.NET рабочий процесс может использовать, прежде чем процесс будет автоматически повторно. Повторное использование предотвращает утечки памяти вызывает ASP.NET после сбоя или перестает отвечать на запросы.

Кроме того, другие факторы Максимальный размер файла, могут быть загружены. Эти факторы включают объем доступной памяти свободного места на диске, скорости процессора и текущий сетевой трафик. С помощью регулярной загрузке файлов, корпорация Майкрософт рекомендует использовать Максимальный размер файла в диапазоне от 10 до 20 мегабайт (МБ). Если вы загрузили редко Возможно, файлы, максимальный размер файла 100 МБ.

Примечание Можно передавать файлы, размер которых превышает 100 МБ в ASP.NET. Тем не менее Корпорация Майкрософт рекомендует следовать максимального размеров перечисленных в этой статье. Чтобы определить более точные размеры файлов выполните нагрузочное тестирование на компьютерах, которые похожи на те, которые будут используемые в производстве.

Вы можете заметить следующие сообщения об ошибках, если ограничение на размер файла, возникающих при загрузке файла:
  • Страница не может быть отображается.
  • Серверное приложение Недоступен
    В журнал событий сообщение об ошибке будет аналогична следующий:

    aspnet_wp.exe (PID:PIDNumber) был перезапущен, так как память Превышение потребления SizeLimit МБ (Процент Процентная доля доступной ОПЕРАТИВНАЯ ПАМЯТЬ).

  • Исключение типа Исключение System.OutOfMemoryException.
Может оказаться, что загрузка происходит очень медленно. Если смотреть процесс Aspnet_wp.exe в диспетчере задач Windows, можно заметить, что дельта изменения памяти на 64 КБ каждые 1-2 секунды. В зависимости от размера файл, эта задержка может привести к ASP.NET рабочий процесс введет из-за Ошибка responseDeadlock.

Ссылки

Для получения дополнительных сведений посетите следующие корпорации Майкрософт Веб-узлы Developer Network (MSDN);
<httpruntime>Элемент</httpruntime>
http://msdn2.Microsoft.com/en-us/library/e1f13641 (vs.71) .aspx

Элемент ввода | входной объект
http://MSDN.Microsoft.com/en-us/library/ms535260 (VS.85) .aspx

Атрибут ENCTYPE | Свойство Enctype
http://msdn2.Microsoft.com/en-us/library/ms533745.aspx

Класс HtmlInputFile
http://msdn2.Microsoft.com/en-us/library/System.Web.UI.HtmlControls.HtmlInputFile (vs.71) .aspx

Свойство HtmlInputFile.PostedFile
http://msdn2.Microsoft.com/en-us/library/System.Web.UI.HtmlControls.HtmlInputFile.PostedFile (vs.71) .aspx

Свойства

Код статьи: 323246 - Последний отзыв: 17 июня 2011 г. - Revision: 14.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Ключевые слова: 
kbhowtomaster kbmt KB323246 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:323246

Отправить отзыв

 

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