Visual C#. NET'i kullanarak bir Web sunucusuna ASP.NET'te bir dosyayı karşıya nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 323246 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, Visual C#. NET'i kullanarak bir Web sunucusuna bir dosyayı karşıya yüklemeyi açıklar. Bu makalede, Microsoft ASP.NET (WebForm1.aspx) dosyayı ve ilgili kodu arkadaki dosyasını oluşturduğunuz dosyaları veri adlı bir dizine yüklemek için (WebForm1.aspx.cs).


ASP.NET uygulamaları oluşturma

Microsoft Visual Studio. NET'te, yeni bir uygulama, Web sunucusuna dosya yükleyebilmesi için aşağıdaki adımları izleyin:
  1. Microsoft Visual Studio .NET'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
  3. Yeni proje) iletişim kutusunda, Project Types altında Visual C# Projects ' ı tıklatın ve sonra şablonları altında ASP.NET Web uygulaması ' ı tıklatın.
  4. Konum</a0> kutusunda, proje oluşturmak için URL'YI yazın. Bu örnekte, varsayılan proje adını CSharpUpload oluşturan http://localhost/CSharpUpload, yazın. Visual Studio. NET'in Tasarımcısı görünümünde WebForm1.aspx dosyasını yükler dikkat edin.

Veri dizini oluşturma

Uygulamayı oluşturduktan sonra karşıya yüklenen dosyaların kabul edecek veri dizini oluşturun. Bu dizini oluşturduktan sonra alt ASPNET hesabı için yazma izinleri ayarlamanız gerekir.
  1. Solution Explorer penceresinde, Visual Studio. NET'in CSharpUpload sağ tıklatın, sonra da Ekle işaret ve Yeni klasör</a1>'ı tıklatın. Varsayılan olarak, NewFolder1 adlı yeni bir klasör oluşturulur.
  2. Veri için klasörün adını değiştirmek için <a0></a0>, NewFolder1 sağ tıklatın, sonra da Yeniden Adlandır ' ı tıklatın ve sonra veri yazın.
  3. Windows Gezgini'ni başlatın ve sonra Adım 2'de oluşturduğunuz veri dosyası sistem klasörünü bulun. Bu klasör, varsayılan olarak, aşağıdaki klasörde bulunur:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. Güvenliğini değiştirmek için veri dizini izinleri veri ' ı sağ tıklatın ve sonra da Properties ' i tıklatın vermek için ayarları yazın.
  5. Veri bağlantı özellikleri iletişim kutusundaki Güvenlik sekmesini tıklatın ve sonra Ekle ' yi tıklatın.
  6. Kullanıcı veya Grup Seç iletişim kutusunda, ASPNET hesabı'nı tıklatın ve sonra Ekle ' yi tıklatın. Kullanıcı veya Grup Seç iletişim kutusunu kapatmak için Tamam ' ı tıklatın.
  7. Tıklatın aspnet_wp hesabının (computername \ASPNET) hesabı tıklatın ve sonra aşağıdaki izinlere izin ver onay kutularını tıklatıp seçin:

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

    Diğer izin ver ve Engelle onay kutularını tıklatıp temizleyin.
  8. Veri özellikleri</a0> iletişim kutusunu kapatmak için Tamam ' ı tıklatın. Karşıya yüklenen kullanıcı dosyalarını kabul edecek şekilde veri dizin izinlerini başarılı bir şekilde 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'in açık örneğine dönün. WebForm1.aspx Designer penceresinde açık olması.
  2. <a0>WebForm1.aspx</a0> sayfasının HTML kaynağını görüntülemek için <a0></a0>, WebForm1.aspx Tasarımcısı penceresinde'ı sağ tıklatın ve sonra da HTML Kaynağı Göster'i tıklatın.
  3. <form>Etiketinde aşağıdaki HTML kodu bulun:
    <form id="Form1" method="post" runat="server">
    					
  4. Ekleme enctype "multipart/form verilerini" = ad-değer özniteliği <form>etiketine aşağıdaki gibi:
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    					
  5. Açılış <form>sonra etiketi, aşağıdaki kodu ekleyin:
    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    					
  6. Doğrulayın <form>HTML etiketi gibi görünür:
    <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 planda kodlama dosyaya ekleyin...

Böylece, karşıya yüklenen veri kabul WebForm1.aspx.cs arka planda kodlama dosyasını değiştirmek için aşağıdaki adımları izleyin:
  1. Görünüm menüsünde tasarımı tıklatın.
  2. Karşıya yükleme çift tıklatın. Visual Studio WebForm1.aspx.cs arka planda kodlama dosya açılır ve aşağıdaki yöntemi kodunu otomatik olarak oluşturur:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    
    
    }
  3. Aşağıdaki kod sınıf WebForm1.cs dosya 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 ekleme kodu dosyaya sonra aşağıdaki satırı:
    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 sonra aşağıdaki kodu 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, ilk kez bir dosyayı karşıya doğrular. Hiçbir dosya seçildi, "Bir dosyayı karşıya yüklemeyi seçin" iletisi alırsınız. Geçerli bir dosyayı karşıya dosya adı System.ıo ad kullanılarak ayıklanabilir ve hedefine SaveAs yola derlenip. Son hedef bilinen sonra dosyayı File1.PostedFile.SaveAs yöntemi kullanılarak kaydedilir. Herhangi bir özel durum yakalanan ve özel durum iletisi ekranda görüntülenir.
  6. Submit1 altyordam gibi göründüğünü 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.");
    	}
    }

Uygulama sınayın.

Visual Studio. NET'in çözümünüz oluşturmak ve uygulamanın sınamak için aşağıdaki adımları izleyin:
  1. Yapı) menüsünde, Build Solution ' ı tıklatın.
  2. Solution Explorer'da (Çözüm Gezgini), WebForm1.aspx dosyasını sağ tıklatın ve sonra Tarayıcıda Görüntüle ' yi tıklatın.
  3. Tarayıcıda WebForm1.aspx açıldıktan sonra Gözat ' ı tıklatın.
  4. Dosya Seç iletişim kutusunda, 4 megabayttan (MB) daha küçük bir dosya seçin ve ' ı tıklatın.
  5. Dosya karşıya yüklemek için Yükle ' yi tıklatın. Bildirim dosyası, Web sunucusuna yükler ve "dosya karşıya" iletisi alırsınız.
  6. Windows Explorer'ın açık örneğine dönün ve veri dizinini bulun.
  7. Dosya verileri karşıya olun dizin.

Dosya karşıya yükleme

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

Not Machine.config dosyasında maxRequestLength özniteliği ayarlanmış ve sonra bir istek (örneğin, bir dosya karşıya yükleme) deftere nakledildiği zaman maxRequestLength değerini aşıyor, özel hata sayfası görüntülenemiyor Bu bağlantı, bir kısmı veya tamamı ingilizce olan içeriğe işaret edebilir. Bunun yerine, Microsoft ınternet Explorer'da bir "ya da DNS sunucu bulunamıyor" hata iletisi görüntüler.

Tüm bilgisayar ve yalnızca bu ASP.NET uygulaması için bu ayarı değiştirmek istiyorsanız, the Machine.config değiştirmeniz gereken dosya.

Varsayılan olarak, <httpruntime> aşağıdaki parametrelerde Machine.config öğesinin şekilde dosya:
<httpRuntime 
executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>
				
The Machine.config dosyasında bulunan \ System Root \Microsoft.NET\Framework\ Version Number \confıg 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 çok büyük. Ancak, ASP.NET durum izlemesi nedeniyle çok büyük dosyalar ASP.NET'te karşıya yükleyemezsiniz. ASP.NET çalışan işlemi, bir sanal adres alanı 2 gigabayttır (GB) vardır. Ancak, ASP.NET çalışan işlemi sağlığını izleme ve bellek parçalanması nedeniyle yalnızca biraz 1 GB'TAN fazla kullanır.

Kullanıcı dosyayı diske kaydetmeden önce yükleme işlemi sırasında bellekteki dosyanın tamamını ASP.NET yükler. Bu nedenle, işlem <a0>Machine.config</a0> dosyasında <a1>processModel</a1> Etiketin memoryLimit özniteliğini nedeniyle geri. ASP.NET çalışan işlemi, fiziksel bellek yüzdesi tüketebileceği, işlem otomatik olarak dönüştürülmeden önce memoryLimit özniteliğini belirtir. Geri dönüştürme, bellek sızıntıları ASP.NET yanıt vermiyor ya da kilitlenmesine neden engeller.

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

Not ASP.NET'te 100 MB'den daha büyük olan dosyaları karşıya yükleyebilirsiniz. Ancak Microsoft, bu makalede sözü geçen en büyük dosya karşıya yükleme boyutlarını izlemenizi önerir. Daha kesin bir dosya boyutunu belirlemek için <a0></a0>, Üretimde kullanılan olanlara benzeyen bilgisayarlardaki sınama baskısı 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ülenemiyor.
  • Sunucu uygulaması kullanılamıyor durumda.
    Hata iletisi olay günlüğüne aşağıdakine benzer olacaktır:

    aspnet_wp.exe (PID: PIDNumber) bellek tüketimini SizeLimit MB aştığından geri dönüştürüldü (Percentage yüzde kullanılabilir RAM).

  • Özel durum türü System.OutOfMemoryException oluşturuldu.
Ayrıca, karşıya yüklemeler çok yavaş ortaya bulabilirsiniz. Windows Görev Yöneticisi'nde Aspnet_wp.exe işlemi izleyin, bellek aralığı, 1-2 saniyede 64 KB değiştirir görürsünüz. Dosya boyutuna bağlı olarak, bu gecikme, responseDeadlock bir hata nedeniyle geri dönüşüm kutusu ASP.NET alt işleminin neden olabilir.

Referanslar

Ek bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini; ziyaret edin.
<httpruntime>öğesi
http://msdn2.microsoft.com/en-us/library/e1f13641(vs.71).aspx

GIRIŞ bir öğe | giriş nesnesi
http://msdn.microsoft.com/en-us/library/ms535260(VS.85).aspx

ENCTYPE özniteliği | enctype özelliği
http://msdn2.microsoft.com/en-us/library/ms533745.aspx

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

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

Özellikler

Makale numarası: 323246 - Last Review: 21 Mayıs 2007 Pazartesi - Gözden geçirme: 5.11
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Anahtar Kelimeler: 
kbmt kbhowtomaster KB323246 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:323246

Geri Bildirim Ver

 

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