Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

Visual C# .NET'i kullanarak ASP.NET'teki Web sunucusuna dosya yükleme

ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.

Makalenin İngilizcesi aşağıdaki gibidir: 323246
Özet
Bu adım adım makalede, Visual C# .NET kullanarak bir Web sunucusuna bir dosyayı karşıya yüklemeyi açıklar. Bu makalede, bir Microsoft ASP.NET dosyası (WebForm1.aspx) ve veri adlı bir dizin için dosyaları karşıya yüklemek için (WebForm1.aspx.cs) ilgili arka plan kod dosyası oluşturun.


Bir ASP.NET uygulaması oluşturma

Microsoft Visual Studio .NET içinde Web sunucusuna dosya yüklemek için yeni bir uygulama oluşturmak için şu adımları izleyin:
  1. Microsoft Visual Studio .NET'i başlatın.
  2. Dosya menüsünde Yeni' nin üzerine ve sonra Proje'yitıklatın.
  3. Yeni Proje iletişim kutusundaki Proje türlerialtında Visual C# projeleri tıklatın ve Şablonlaraltında ASP.NET Web uygulaması ' nı tıklatın.
  4. Konum kutusunda, projeyi oluşturmak için URL yazın. Bu örnekte, yazınhttp://localhost/CSharpUpload, CSharpUpload defaultproject adını oluşturur. Visual Studio .NET theDesigner görünümünde WebForm1.aspx dosyasını yükler dikkat edin.

Veri dizini oluşturmak

Uygulamayı oluşturduktan sonra karşıya yüklenen dosyaların kabul edecek veri dizini oluşturun. Bu dizini oluşturduktan sonra ayrıca ayarlamanız gerekir yazma izinleri alt ASPNET hesabı için.
  1. Visual Studio .NET Solution Explorer penceresinde, CSharpUploadsağ tıklatın, Ekle' ye gelin ve Sonra yeni klasör' ü tıklatın. Varsayılan olarak, NewFolder1 iscreated adlı yeni bir klasör.
  2. Klasör adı için verileri değiştirmek için NewFolder1sağ tıklatın, Yeniden Adlandır' ı tıklatın ve sonra yazın Veri.
  3. Windows Gezgini'ni başlatın ve sonra adım 2'de oluşturduğunuz veri dosya sistemi klasörü bulun. Varsayılan olarak, bu klasör aşağıdaki klasörde bulunur:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. Veri dizinine yazma permissionsto vermek için güvenlik ayarlarını değiştirmek için verilerisağ tıklatın ve sonra Özellikler' i tıklatın.
  5. Veri özellikleri iletişim kutusunda, Güvenlik sekmesini tıklatın ve sonra Ekle' yi tıklatın.
  6. Kullanıcıları veya Grupları Seç iletişim kutusunda, ASPNET hesabı tıklatın ve ardından Ekle'yitıklatın. Kullanıcıları veya Grupları Seç iletişim kutusu kapatmak için Tamam ' ı tıklatın.
  7. ' I tıklatın Hesap (Aspnet_wp)BilgisayarAdı\ASPNET) onay kutularını aşağıdaki izinler için hesap ve izin seçmek için tıklatın:

    • Okuma ve yürütme
    • Klasör içeriğini listele
    • Okuma
    • Yazma

    Tüm diğer izin ver ve Reddet onay kutularını temizlemek için tıklatın.
  8. Veri özellikleri iletişim kutusunu kapatmak için Tamam ' ı tıklatın. Başarıyla karşıya kullanıcı dosyalarını kabul edecek şekilde veri directorypermissions değiştirdiniz.

WebForm1.aspx sayfasını değiştirme

Kullanıcıların dosyaları karşıya yüklemek için izin vermek için WebForm1.aspx dosyasının HTML kodunu değiştirmek için şu adımları izleyin:
  1. Visual Studio .NET açık örneğine dönün. WebForm1.aspx Designer penceresinde açık olması.
  2. WebForm1.aspx sayfasının HTML kaynağını görüntülemek için WebForm1.aspx Designer penceresinde sağ tıklatın ve HTML Kaynağı Göster'itıklatın.
  3. İçeren aşağıdaki HTML kodunu bulma<form>Etiket:</form>
    <form id="Form1" method="post" runat="server">					
  4. Eklemek enctype = "multipart/form-data" için ad-değer özniteliği<form>etiketini aþaðýdaki gibi düzenleyin:</form>
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">					
  5. Açtıktan sonra<form>Etiket, aşağıdaki kodu ekleyin:</form>
    <INPUT type=file id=File1 name=File1 runat="server" /><br><input type="submit" id="Submit1" value="Upload" runat="server" />					
  6. Doğrulayın HTML<form>etiketi aşağıdaki gibi görünür:</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>					

Karşıya yükleme kodu WebForm1.aspx.cs arka plan kod dosyasına ekleyin

Karşıya yüklenen veriler kabul böylece WebForm1.aspx.cs arka plan kod dosyasını değiştirmek için şu adımları izleyin:
  1. Görünüm menüsünde, Tasarım' ı tıklatın.
  2. Upload'a çift tıklayın. Visual Studio açar WebForm1.aspx.cs arka plan kod dosyası andautomatically yöntemini aşağıdaki kod oluşturur:
    private void Submit1_ServerClick(object sender, System.EventArgs e){}
  3. Aşağıdaki kod WebForm1.cs dosyasının sınıf düzeyinde bulunduğunu doğrulayın:
    protected System.Web.UI.HtmlControls.HtmlInputFile File1;protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;						
    Bu kod dosyasında yoksa, kod fileafter aşağıdaki satırı ekleyin:
    public class WebForm1 : System.Web.UI.Page{					
  4. Aşağıdaki kodu bulun:
    private void Submit1_ServerClick(object sender, System.EventArgs e){					
  5. Boş bir satır ekleyin ve followingcode eklemek için ENTER tuşuna basın:
    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.");}
    Bu kod, öncelikle bir dosyayı karşıya doğrular. Hiçbir dosya wasselected, "Lütfen yüklemek üzere bir dosya seçin" iletisini alırsınız. Bir validfile karşıya dosya adını System.IO ad alanı kullanılarak ayıklanır ve hedefine SaveAs yolda birleştirilen. Son hedef bilinen sonra dosyasıdır File1.PostedFile.SaveAs yöntemini kullanarak kaydedilmiş. Herhangi bir özel durum yakalanır ve ekranda özel durum iletisi isdisplayed.
  6. Submit1 alt yordam aşağıdaki şekilde görüntülendiğini doğrulayın:
    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.");	}}

Uygulamayı test et

Visual Studio .NET çözümünüzü oluşturun ve uygulamayı test etmek için şu adımları izleyin:
  1. Build menüsünden Build Solutionkomutunu tıklayın.
  2. Çözüm Gezgini'nde, WebForm1.aspxdosyasını sağ tıklatın ve sonra tarayıcıda görüntüle' yi tıklatın.
  3. WebForm1.aspx tarayıcısında açıldıktan sonra Gözat' ı tıklatın.
  4. Dosya Seç iletişim kutusunda, 4 megabayttan (MB) daha küçük olan bir dosyayı seçin ve ' ı tıklatın.
  5. Dosyayı karşıya yüklemek için Karşıya Yükle' yi tıklatın. Dosyayı Web sunucusu ve bu youreceive için "dosya karşıya yüklendi" iletisini yükler dikkat edin.
  6. Windows Gezgini ve yakın açık örneğine veri dizinini döndürür.
  7. Datadirectory için dosya karşıya olduğunu doğrulayın.

Büyük dosyaları karşıya yüklemek

Varsayılan olarak, ASP.NET yalnızca 4.096 kilobayt (KB) dosyaları verir (veya 4 MB) veya daha az Web sunucusuna karşıya yüklenecek. Büyük dosyaları karşıya yüklemek için maxRequestLength parametresini değiştirmek <httpRuntime></httpRuntime> Web.config dosyasındaki bölüm.

Not: Ne zaman öznitelik maxRequestLength Machine.config dosyasında ayarlanır ve daha sonra bir istek (örneğin, bir dosya yükleme) nakledilir, maxRequestLengthdeğerini aşıyor, bir özel hata sayfası görüntülenemiyor. Bunun yerine, Microsoft Internet Explorer bir "sunucu ya da DNS bulunamadı" hata iletisi görüntüler.

Tüm bilgisayar ve yalnızca bu ASP.NET uygulaması için bu ayarı değiştirmek isterseniz, Machine.config dosyasını değiştirmeniz gerekir.

Varsayılan olarak, <httpRuntime></httpRuntime> ögesi Machine.config dosyasında aşağıdaki parametreleri ayarlayın:
<httpRuntime executionTimeout="90" maxRequestLength="4096"useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4"appRequestQueueLimit="100"/>				
Machine.config dosyasında bulunan \Sistem kökü\Microsoft.NET\Framework\Sürüm numarası\CONFIG dizin.


Tam kod listesi

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.");			}		}	}}	
Daha fazla bilgi
Teorik olarak, en büyük dosya karşıya yükleme boyutu oldukça büyüktür. Ancak, ASP.NET durum izlemesi nedeniyle ASP.NET çok büyük dosyaları karşıya yükleyemez. ASP.NET çalışan işlemi bir sanal adres alanı 2 gigabayt (GB) vardır. Ancak, ASP.NET alt işlemi yalnızca sistem durumu izleme ve bellek parçalanması nedeniyle biraz daha fazla 1 GB kullanır.

Kullanıcı dosyayı diske kaydetmeden önce yükleme işlemi sırasında ASP.NET dosyanın tamamını belleğe yükler. Bu nedenle, işlem nedeniyle Machine.config dosyasının processModel etiketinde memoryLimit özniteliğini dönüşüm. ASP.NET çalışan işlemi fiziksel bellek yüzdesini otomatik olarak dönüştürülmeden önce Egzoz memoryLimit özniteliğini belirtir. Geri dönüşümü, ASP.NET yanıt vermemesine veya çökmesine neden bellek sızıntılarını engeller.

Ayrıca, diğer etkenler karşıya yüklenebilecek en büyük dosya boyutu bir rol oynar. Bu etkenler, kullanılabilir bellek, kullanılabilir sabit disk alanı, işlemci hızı ve geçerli ağ trafiği içerir. İle normal trafiği karşıya yüklenen dosyaların Microsoft, bir maksimum dosya boyutu 10-20 megabayt (MB) aralığında kullanmanızı önerir. Seyrek dosyaları karşıya yüklemek, en büyük dosya boyutu 100 MB olabilir.

Not: ASP 100 MB daha büyük olan dosyaları karşıya yükleyebilirsiniz. Ancak, Microsoft, bu makalede belirtilen en büyük dosya karşıya yükleme boyutu izlemenizi önerir. Daha kesin dosya boyutlarını belirlemek için stres üretimde kullanılan olanlara benzer bilgisayarlardaki sınama gerçekleştirin.

Dosya karşıya yükleme işlemi sırasında dosya boyutu sınırları karşılaşırsanız aşağıdaki hata iletilerini görebilirsiniz:
  • Sayfa görüntülenmek üzereyken olamaz.
  • Sunucu uygulama isUnavailable
    Olay günlüğüne hata iletisi için aşağıdaki gibi olacaktır:

    aspnet_wp.exe(PID:PIDNumber) memoryconsumption aştığından geri dönüştürüldü. SizeLimit MB)Yüzde yüzde availableRAM).

  • TypeSystem.OutOfMemoryException, özel durum oluştu.
Ayrıca, karşıya yüklemeler çok yavaş ortaya bulabilirsiniz. Windows Görev Yöneticisi'nde Aspnet_wp.exe işlemini izlemek, bellek aralığı 1-2 saniyede 64 KB değişir fark edeceksiniz. Dosya boyutuna bağlı olarak, ASP.NET alt işlemi geri dönüşüm responseDeadlock hata nedeniyle bu gecikmeye neden olabilir.
Referanslar
Ek bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini ziyaret edin;

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 323246 - Son İnceleme: 04/10/2016 00:44:00 - Düzeltme: 6.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 KbMttr
Geri bildirim