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:
- Microsoft Visual Studio .NET'i başlatın.
- Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
- 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.
- 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.
- 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.
- 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.
- 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
- 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.
- Veri bağlantı özellikleri iletişim kutusundaki Güvenlik sekmesini tıklatın ve sonra Ekle ' yi tıklatın.
- 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.
- 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. - 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:
- Visual Studio. NET'in açık örneğine dönün. WebForm1.aspx Designer penceresinde açık olması.
- <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.
- <form>Etiketinde aşağıdaki HTML kodu bulun:
<form id="Form1" method="post" runat="server">
- 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">
- 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" />
- 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:
- Görünüm menüsünde tasarımı tıklatın.
- 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)
{
} - 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
{
- Aşağıdaki kodu bulun:
private void Submit1_ServerClick(object sender, System.EventArgs e)
{
- 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. - 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:
- Yapı) menüsünde, Build Solution ' ı tıklatın.
- 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.
- Tarayıcıda WebForm1.aspx açıldıktan sonra Gözat ' ı tıklatın.
- Dosya Seç iletişim kutusunda, 4 megabayttan (MB) daha küçük bir dosya seçin ve Aç ' ı tıklatın.
- 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.
- Windows Explorer'ın açık örneğine dönün ve veri dizinini bulun.
- 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.");
}
}
}
}
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:
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.
Ek bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini; ziyaret edin.