Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để tải lên một tập tin vào một máy chủ Web trong ASP.NET bằng cách sử dụng Visual C#.NET

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:323246
TÓM TẮT
Bài viết từng bước này mô tả cách để tải lên một tập tin để một máy chủ Web bằng cách sử dụng Visual C#.NET. Trong bài này, bạn tạo một Microsoft ASP.NET file (WebForm1.aspx) và tập tin liên quan đến mã-đằng sau của nó (WebForm1.aspx.cs) để tải lên tập tin vào một thư mục có tên Dữ liệu.


Tạo một ASP.NET application

Trong Microsoft Visual Studio.NET, hãy làm theo các bước sau để tạo ra một mới ứng dụng để tải lên tập tin vào máy chủ Web:
  1. Bắt đầu Microsoft Visual Studio.NET.
  2. Trên các Tệp trình đơn, điểm đến Mới, sau đó bấm Dự án.
  3. Trong các Dự án mới hộp thoại hộp, bấm vào Visual C# các dự án dưới Các loại dự án, sau đó bấm ASP.NET Web ứng dụng dưới Khuôn mẫu.
  4. Trong các Vị trí hộp, gõ URL để tạo ra các dự án. Ví dụ này, gõhttp://localhost/CSharpUpload, mà tạo ra mặc định tên dự án của CSharpUpload. Lưu ý rằng WebForm1.aspx file tải trong các Thiết kế cảnh Visual Studio.NET.

Tạo thư mục dữ liệu

Sau khi bạn tạo các ứng dụng, bạn tạo thư mục dữ liệu mà sẽ chấp nhận các tập tin được tải lên. Sau khi bạn tạo thư mục này, bạn phải cũng thiết lập quyền ghi cho tài khoản người lao động ASPNET.
  1. Trong cửa sổ giải pháp Explorer Visual Studio.NET, Nhấp chuột phải CSharpUpload, điểm đến Thêm, sau đó bấm Thư mục mới. Theo mặc định, một thư mục mới được đặt tên NewFolder1 là tạo ra.
  2. Để thay đổi tên thư mục dữ liệu, bấm chuột phải vào NewFolder1, bấm Đổi tên, rồi gõ Dữ liệu.
  3. Bắt đầu Windows Explorer, và sau đó xác định vị trí tệp dữ liệu hệ thống thư mục mà bạn đã tạo ở bước 2. Theo mặc định, thư mục này nằm ở thư mục sau đây:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. Để thay đổi bảo mật thiết lập cấp viết cấp phép vào thư mục dữ liệu, bấm chuột phải vào Dữ liệu, sau đó bấm Thuộc tính.
  5. Trong các Thuộc tính dữ liệu hộp thoại hộp, bấm vào các Bảo mật tab, và sau đó nhấp vào Thêm.
  6. Trong các Chọn người dùng hoặc nhóm hộp thoại, bấm vào các ASPNET tài khoản, và sau đó nhấp vào Thêm. Nhấp vào Ok để đóng những Chọn người dùng hoặc nhóm hộp thoại hộp.
  7. Bấm vào các aspnet_wp tài khoản)computername\ASPNET) tài khoản, và sau đó bấm vào để chọn các Cho phép kiểm tra xem hộp cho các điều khoản sau đây:

    • Đọc và thực thi
    • Danh sách thư mục nội dung
    • Đọc
    • Viết

    Nhấp vào xoá bất kỳ khác Cho phépTừ chối hộp kiểm.
  8. Nhấp vào Ok để đóng những Thuộc tính dữ liệu hộp thoại. Bạn đã thành công thay đổi thư mục dữ liệu cấp phép để chấp nhận người dùng đã tải lên tập tin.

Sửa đổi trang WebForm1.aspx

Để thay đổi mã HTML của các tập tin WebForm1.aspx để cho phép người dùng tải tập tin lên, hãy làm theo các bước sau:
  1. Trả lại cho trường hợp mở Visual Studio.NET. WebForm1.aspx nên được mở trong cửa sổ nhà thiết kế.
  2. Xem nguồn HTML của trang WebForm1.aspx, Nhấp chuột phải WebForm1.aspx trong cửa sổ nhà thiết kế và sau đó nhấp vào Xem HTML Source.
  3. Xác định vị trí mã HTML sau, chứa các<form>từ khóa:</form>
    <form id="Form1" method="post" runat="server">					
  4. Thêm các enctype = "multipart/mẫu-dữ liệu" Tên giá trị thuộc tính đến sự<form>từ khóa như sau:</form>
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">					
  5. Sau khi mở<form>từ khóa, thêm mã sau đây:</form>
    <INPUT type=file id=File1 name=File1 runat="server" /><br><input type="submit" id="Submit1" value="Upload" runat="server" />					
  6. Xác minh rằng HTML<form>từ khóa sẽ xuất hiện như sau:</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>					

Thêm mã tải lên tập tin mã phía sau WebForm1.aspx.cs

Để sửa đổi các tập tin mã phía sau WebForm1.aspx.cs như vậy mà nó chấp nhận các được tải lên dữ liệu, thực hiện theo các bước sau:
  1. Trên các Xem trình đơn, nhấp vào Thiết kế.
  2. Bấm đúp Tải lên. Visual Studio mở tập tin mã phía sau WebForm1.aspx.cs và tự động tạo mã phương pháp sau đây:
    private void Submit1_ServerClick(object sender, System.EventArgs e){}
  3. Kiểm chứng rằng đoạn mã sau tồn tại ở cấp độ lớp của các tập tin WebForm1.cs:
    protected System.Web.UI.HtmlControls.HtmlInputFile File1;protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;						
    Nếu mã này không tồn tại trong tập tin, thêm mã vào tập tin sau khi dòng sau:
    public class WebForm1 : System.Web.UI.Page{					
  4. Xác định vị trí mã sau đây:
    private void Submit1_ServerClick(object sender, System.EventArgs e){					
  5. Hãy bấm ENTER để thêm một dòng trống, và sau đó thêm dưới đây Mã số:
    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.");}
    Mã này lần đầu tiên xác minh rằng một tập tin đã được tải lên. Nếu không có tập tin là bạn đã chọn, nhận được thông báo "Hãy chọn một tệp để tải lên". Nếu một hợp lệ tập tin được tải lên, tên tập tin được trích xuất bằng cách sử dụng các System.io không gian tên, và điểm đến của nó được lắp ráp trong một SaveAs đường dẫn. Sau khi các điểm đến cuối cùng được biết đến, các tập tin được lưu bởi bằng cách sử dụng các File1.PostedFile.SaveAs phương pháp. Bất kỳ ngoại lệ bị mắc kẹt, và thông điệp ngoại lệ hiển thị được trên màn hình.
  6. Xác minh rằng các Submit1 chương trình con sẽ xuất hiện như sau:
    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.");	}}

Kiểm tra các ứng dụng

Để xây dựng của bạn Visual Studio.NET giải pháp và để kiểm tra các ứng dụng, hãy làm theo các bước sau:
  1. Trên các Xây dựng trình đơn, nhấp vào Xây dựng giải pháp.
  2. Trong giải pháp Explorer, bấm chuột phải vào WebForm1.aspx, sau đó bấm Xem trong trình duyệt.
  3. Sau khi WebForm1.aspx sẽ mở ra trong trình duyệt, bấm Trình duyệt.
  4. Trong các Chọn tập tin hộp thoại, chọn một tập tin nhỏ hơn 4 megabyte (MB), sau đó bấm Mở.
  5. Để tải lên tệp, bấm Tải lên. Chú ý rằng các tập tin tải lên máy chủ Web và rằng bạn nhận được thông báo "tập tin đã được tải lên".
  6. Trả lại cho trường hợp mở Windows Explorer, và sau đó xác định vị trí thư mục dữ liệu.
  7. Xác minh rằng các tập tin đã được tải lên dữ liệu thư mục.

Tải tập tin lớn hơn lên

Theo mặc định, ASP.NET chỉ cho phép tệp đang 4,096 kilobyte (KB) (hoặc 1 MB) hoặc ít hơn để được tải lên máy chủ Web. Để tải lên lớn hơn tác phẩm, bạn phải thay đổi các maxRequestLength tham số của các <httpruntime></httpruntime> phần trong Web.config file.

Chú ý Khi các maxRequestLength thuộc tính được đặt trong tập tin Machine.config và sau đó yêu cầu là đăng (ví dụ, một tải lên tập tin) mà vượt quá giá trị của maxRequestLength, một lỗi tuỳ chỉnh trang web không thể hiển thị. Thay vào đó, Microsoft Internet Explorer sẽ hiển thị một lỗi "Không thể tìm thấy máy chủ hoặc DNS" .

Nếu bạn muốn thay đổi thiết đặt này cho tất cả các máy tính và không chỉ này ASP.Ứng dụng mạng, bạn phải sửa đổi Machine.config tập tin.

Theo mặc định, các <httpruntime></httpruntime> nguyên tố được thiết lập để các tham số sau đây trong Machine.config tập tin:
<httpRuntime executionTimeout="90" maxRequestLength="4096"useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4"appRequestQueueLimit="100"/>				
Các tập tin Machine.config này tọa lạc ở các \Các vấn đề Người chủ\Microsoft.NET\Framework\Phiên bản Số\CONFIG thư mục.


Danh sách mã hoàn chỉnh

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.");			}		}	}}	
THÔNG TIN THÊM
Về lý thuyết, kích thước tối đa tập tin tải lên là khá lớn. Tuy nhiên, vì của ASP.NET y tế giám sát, bạn không thể tải lên rất lớn tác phẩm trong ASP.NET. ASP.NET công nhân quá trình có một không gian địa chỉ ảo của 2 Gigabyte (GB). Tuy nhiên, ASP.Quá trình công nhân NET chỉ sử dụng nhiều hơn một chút hơn 1 GB vì của y tế giám sát và bộ nhớ phân mảnh.

Trong quá trình tải lên, ASP.NET tải tập tin toàn bộ trong bộ nhớ trước khi người dùng có thể lưu tệp vào đĩa. Vì vậy, quá trình có thể tái chế vì các memoryLimit thuộc tính của các processModel từ khóa trong tập tin Machine.config. Các memoryLimit thuộc tính xác định tỷ lệ phần trăm bộ nhớ vật lý mà các ASP.Quá trình NET công nhân có thể thải trước khi quá trình là tự động tái chế. Tái chế ngăn rò rỉ bộ nhớ gây ASP.NET sụp đổ hoặc đến ngừng đáp ứng.

Ngoài ra, các yếu tố khác đóng một vai trò các Kích thước tối đa tập tin có thể được tải lên. Các yếu tố này bao gồm bộ nhớ có sẵn, không gian đĩa cứng sẵn dùng, tốc độ xử lý, và hiện tại mạng lưới giao thông. Với thường xuyên lưu lượng truy cập các tập tin được tải lên, Microsoft khuyến cáo bạn sử dụng một Kích thước tối đa tệp trong khoảng 10 đến 20 megabyte (MB). Nếu bạn hiếm khi tải lên tác phẩm, kích thước tệp tối đa có thể là 100 MB.

Chú ý Bạn có thể tải lên tập tin lớn hơn 100 MB trong ASP.NET. Tuy nhiên, Microsoft khuyến cáo bạn hãy làm theo các kích thước tối đa tập tin tải lên đó đề cập đến trong bài viết này. Để xác định chính xác hơn các kích thước của tập tin, căng thẳng thử nghiệm trên các máy tính tương tự như những cái mà sẽ thực hiện được sử dụng trong sản xuất.

Bạn có thể nhận thấy các thông báo lỗi sau đây nếu bạn gặp phải giới hạn kích thước tệp trong quá trình tải lên tập tin:
  • Trang không thể hiển thị.
  • Máy chủ ứng dụng này Không sẵn dùng
    Trong sổ ghi sự kiện, các thông báo lỗi sẽ được tương tự như các sau:

    aspnet_wp.exe (PID:PIDNumber) đã được tái chế bởi vì bộ nhớ tiêu thụ vượt quá các SizeLimit MB (Tỷ lệ phần trăm phần trăm có sẵn RAM).

  • Ngoại lệ của kiểu System.OutOfMemoryException được ném.
Bạn cũng có thể thấy rằng tải lên xảy ra rất chậm. Nếu bạn xem Aspnet_wp.exe trình trong Windows Task Manager, bạn sẽ nhận thấy rằng các bộ nhớ delta đổi bởi 64 KB mỗi 1-2 giây. Tùy thuộc vào kích thước của các tập tin, sự chậm trễ này có thể gây ra ASP.NET công nhân quá trình tái chế vì một lỗi responseDeadlock.
THAM KHẢO
Để thêm thông tin, hãy truy cập Microsoft sau đây Các trang Web của nhà phát triển mạng (MSDN);

Warning: This article has been translated automatically

Thuộc tính

ID Bài viết: 323246 - Xem lại Lần cuối: 08/27/2011 15:40:00 - Bản sửa đổi: 2.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 KbMtvi
Phản hồi