It’s me

August 6, 2007

GridView 를 엑셀로 추출하는 코드

Filed under: ASP.NET — rothmans @ 9:24 am

다음은 GridView 를 엑셀로 추출하는 코드입니다

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class ExportGridView : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GridView1.DataSource = BindData();
            GridView1.DataBind();
        }
    }

   

    private string ConnectionString
    {

        get { return @”Server=localhost;Database=Northwind;
        Trusted_Connection=true”; }

    }

   

    private DataSet BindData()
    {
        // 질의 생성
        string query = “SELECT * FROM Categories”;
        SqlConnection myConnection = new SqlConnection(ConnectionString);
        SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);
        DataSet ds = new DataSet();
        ad.Fill(ds, “Categories”);
        return ds;

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Clear();

        Response.AddHeader(“content-disposition”, “attachment;
        filename=FileName.xls”);

        Response.Charset = “”;

        // 저장하기를 표시하지 않으려면 다음의 코멘트를 사용

        // Response.Cache.SetCacheability(HttpCacheability.NoCache);

        Response.ContentType = “application/vnd.xls”;

        System.IO.StringWriter stringWrite = new System.IO.StringWriter();

        System.Web.UI.HtmlTextWriter htmlWrite =
        new HtmlTextWriter(stringWrite);

        GridView1.RenderControl(htmlWrite);

        Response.Write(stringWrite.ToString());

        Response.End();

    }

    public override void VerifyRenderingInServerForm(Control control)
    {

        // Confirms that an HtmlForm control is rendered for the
        specified ASP.NET server control at run time.

    }
}
 

July 16, 2007

구성파일 (web.config) 암/복호화

Filed under: ASP.NET — rothmans @ 2:11 pm

구성파일 (web.config) 암/복호화

기본적으로 제공되는 빌트 인 구성 암호화 제공자는 아래의 두가지 이다.

  • RsaProtectedConfigurationProvider
  • DataProtectionConfigurationProvider

이 제공자들은 machine.config에서 확인할 수 있다.

<configProtectedData defaultProvider=”RsaProtectedConfigurationProvider“> <providers> <add name=”RsaProtectedConfigurationProvider” type=”System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” description=”Uses RsaCryptoServiceProvider to encrypt and decrypt” keyContainerName=”NetFrameworkConfigurationKey” cspProviderName=”" useMachineContainer=”true” useOAEP=”false” /> <add name=”DataProtectionConfigurationProvider” type=”System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” description=”Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt” useMachineProtection=”true” keyEntropy=”" /> </providers> </configProtectedData>

예를 들어 /test/web.config 가 아래와 같고, 이를 암/복호화 하려면,

<connectionStrings> <add name=”connstr” connectionString= “data source=.\sqlexpress;initial catalog= northwind;integrated security=true” /> </connectionStrings>

vs.net command prompt에서

aspnet_regiis -pe “구성섹션이름” -app “가상디렉토리” [-site "사이트이름"]

IIS에서 여러 사이트를 호스팅하는 경우 -SITE 옵션을 명시해줍니다. 명시된 가상디렉토리 root의 web.config 파일 내 해당 구성섹션이 암호화 됨

aspnet_regiis -pe “connectionStrings” -app “/test”

encryptconfig1.gif

암호화된 섹션은 아래와 같다.

 <!-- 구성 섹션 암호화 테스트 용 -->
 	<CONFIGURATION> <APPSETTINGS /> <CONNECTIONSTRINGS  	configProtectionProvider="RsaProtectedConfigurationProvider">  	<ENCRYPTEDDATA xmlns="http://www.w3.org/2001/04/xmlenc#"  	Type="http://www.w3.org/2001/04/xmlenc#Element"> <ENCRYPTIONMETHOD  	Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> <KEYINFO  	xmlns="http://www.w3.org/2000/09/xmldsig#"> <ENCRYPTEDKEY  	xmlns="http://www.w3.org/2001/04/xmlenc#"> <ENCRYPTIONMETHOD  	Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <KEYINFO  	xmlns="http://www.w3.org/2000/09/xmldsig#"> <KEYNAME>Rsa  	Key</KEYNAME> </KEYINFO> <CIPHERDATA>  	<CIPHERVALUE>Ln9cewaXzKvsGLOWLKsTY3cMzfjYUNj1EvnoFZI4Gd+oLzLfE9Sy3e9nTtjITfurvF1M+VNmYrhiBkn2R9dFsXXeekacuRBfuzGDs3RFyRqXbknPP6BzpkNiScj5vcrUbwZT1j4XR4TD/qhFaY8FHXym7CA/2d1G3MOizfhwCs0=</CIPHERVALUE>  	</CIPHERDATA> </ENCRYPTEDKEY> </KEYINFO> <CIPHERDATA>  	<CIPHERVALUE>LqzsDVxT3HMiQE7m+joQ1b9pq2Eq6jE8w4ezbSL+Q3JC6OYZITXf6wg4UVq7V7cVa1goh9UtRhKifgzvoybkP6hOy+495p7ewr2ARCBbDgwdtL/Of39/jXGWBSrTcHgu9tVlpnJGN57iX9Je33QQ0xYu+8NhuXtIhCdmrSpBpMuld/jxNQoT4lDiwrfiVIu08xoeP4v/00TTwjy+RgvnHnc+W1QqypsQK58yiikhuc0=</CIPHERVALUE>  	</CIPHERDATA> </ENCRYPTEDDATA> </CONNECTIONSTRINGS>

구성섹션을 다시 복호화

aspnet_regiis -pd “connectionStrings” -app “/test”

프로그래밍 적으로 구성섹션을 암호화 하려면,

Configuration config = WebConfigurationManager. OpenWebConfiguration(Request.ApplicationPath); ConfigurationSection section = config.ConnectionStrings; 
if (!section.SectionInformation.IsProtected)
{
< /STRONG > section.SectionInformation.ProtectSection (“RsaProtectedConfigurationProvider”); section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);
}

프로그래밍 적으로 구성섹션을 복호화 하려면,

Configuration config = WebConfigurationManager. OpenWebConfiguration(Request.ApplicationPath); ConfigurationSection section = config.ConnectionStrings;
if (section.SectionInformation.IsProtected)
{
section.SectionInformation.UnprotectSection();
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);
}

이상과 같이 구성섹션을 암/복호화 할 수 있다.

July 2, 2007

SmtpMail 클래스를 사용한 메일 보내기

Filed under: ASP.NET — rothmans @ 5:58 pm

- MailMessage 속성 및 메서드
 Attachments  - 메일에 첨부할 파일들의 목록
 Bcc     - 숨은 참조(BCC)로 설정할 메일주소. 여러 명일 경우 세미콜론(;)으로 이어서 작성한다.
 Body    - 메일 본문
 BodyEncoding - 메일 본문의 내용 형식
 Cc     - 참조(BCC)로 설정할 메일 주소
 From     - 보내는 사람의 메일 주소
 Subject    - 메일의 제목
 To     - 받는 사람의 메일 주소

- MailMessage 클래스 생성의 예
MailMessage mail = new MailMessage();
mail.From = “받는사람메일주소@abc.com“;
mail.To = “보내는사람메일주소@ccc.com“;
mail.Subject = “메일 보내기 테스트입니다.”;
mail.Body = “메일이네요…^^”;
mail.BodyFormat = MailFormat.Html; //MailFormat.Text 는 텍스트 모드
- SmtpMail 클래스
메일을 SMTP 프로토콜을 이용하여 보내는 클래스

- SmtpMail 속성 및 메서드
 SmtpServer  - 메일을 보내는 데 사용하는 SMTP 메일 서버 이름.
 Send    - 메일을 보내는 메서드

- SmtpMail 클래스 예
SmtpMail.SmtpServer = “localhost”;
SmtpMail.Send(mail);

string from = “from@microsoft.com“;
string to = “to@microsoft.com“;
string subject = “UtilMailMessage001″;
string body = “<html><body>UtilMailMessage001 – success</body></html>”;
SmtpMail.SmtpServer = “localhost”;
SmtpMail.Send(from, to, subject, body);

Visual C# .NET을 사용하여 ASP.NET에서 웹 서버에 파일 업로드

Filed under: ASP.NET — rothmans @ 5:58 pm

HOWTO: Visual C# .NET을 사용하여 ASP.NET에서 웹 서버에 파일 업로드

적용 대상

이 문서의 Microsoft Visual Basic .NET 버전에 대한 내용은 323245를 참조하십시오.

작업 내용

요약

이 문서에서는 Visual C# .NET을 사용하여 웹 서버에 파일을 업로드하는 방법을 단계별로 설명합니다. 이 문서에서는 ASP.NET 파일(WebForm1.aspx) 및 해당 관련 코드 숨김 파일(WebForm1.aspx.cs)을 만들어서 Data라는 이름의 디렉터리에 파일을 업로드합니다.

맨 위로

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의 디자이너 보기에 로드됩니다.

맨 위로

Data 디렉터리 만들기

응용 프로그램을 만든 후에는 업로드한 파일을 저장할 Data 디렉터리를 만듭니다. 또한 이 디렉터리를 만든 후에 ASPNET 작업자 계정에 대해 쓰기 권한을 설정해야 합니다.

  1. Visual Studio .NET의 솔루션 탐색기 창에서 CSharpUpload를 마우스 오른쪽 단추로 누르고 추가를 누른 다음 새 폴더를 누릅니다. 기본적으로 NewFolder1이라는 이름의 폴더가 새로 만들어집니다.
  2. 폴더 이름을 Data로 바꾸려면 NewFolder1을 마우스 오른쪽 단추로 누르고 이름 바꾸기를 누른 다음 Data를 입력합니다.
  3. Windows 탐색기를 시작한 다음 2단계에서 만든 Data 파일 시스템 폴더를 찾습니다. 기본적으로 이 폴더는 아래 폴더에 있습니다.

    C:\Inetpub\wwwroot\CSharpUpload\Data

  4. 보안 설정을 변경하여 Data 디렉터리에 대한 쓰기 권한을 부여하려면 Data를 마우스 오른쪽 단추로 누른 다음 등록 정보를 누릅니다.
  5. Data 등록 정보 대화 상자에서 보안 탭을 누른 다음 추가를 누릅니다.
  6. 사용자 또는 그룹을(를) 선택하십시오. 대화 상자에서 ASPNET 계정을 누른 다음 추가를 누릅니다. 확인을 눌러 사용자 또는 그룹을(를) 선택하십시오. 대화 상자를 닫습니다.
  7. aspnet_wp account (computername\ASPNET) 계정을 누른 후 다음 사용 권한에 대해 허용 확인란을 선택합니다.
    • 읽기 및 실행
    • 폴더 내용 보기
    • 읽기
    • 쓰기

    그 밖의 다른 허용 확인란과 거부 확인란은 모두 선택 취소합니다.

  8. 확인을 눌러 Data 등록 정보 대화 상자를 닫습니다. Data 디렉터리 사용 권한이 성공적으로 수정되어 사용자가 업로드한 파일이 저장됩니다.

맨 위로

WebForm1.aspx 페이지 수정

사용자가 파일을 업로드할 수 있도록 WebForm1.aspx 파일의 HTML 코드를 수정하려면 다음과 같이 하십시오.

  1. 앞에서 연 Visual Studio .NET의 인스턴스로 돌아옵니다. WebForm1.aspx가 디자이너 창에서 열립니다.
  2. WebForm1.aspx 페이지의 HTML 소스를 보려면 디자이너 창에서 WebForm1.aspx를 마우스 오른쪽 단추로 누른 다음 HTML 소스 보기를 누릅니다.
  3. <form> 태그가 포함되어 있는 다음 HTML 코드를 찾습니다.
    <form id="Form1" method="post" runat="server">
  4. 다음과 같이 <form> 태그에 enctype=”multipart/form-data” 이름-값 특성을 추가합니다.
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
  5. 여는 <form> 태그 뒤에 다음 코드를 추가합니다.
    <INPUT type=file id=File1 name=File1 runat="server" /> <br> <input type="submit" id="Submit1" value="Upload" runat="server" />
  6. HTML <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. Upload를 두 번 누릅니다. 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. Enter 키를 눌러 빈 줄을 삽입한 후 다음 코드를 추가합니다.
    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); 	} } else { 	Response.Write("Please select a file to upload."); }

    이 코드는 파일이 업로드되었는지 가장 먼저 확인합니다. 파일을 선택하지 않은 경우에는 “Please select a file to upload” 메시지가 나타납니다. 올바른 파일을 업로드한 경우에는 System.IO 네임스페이스를 사용하면 파일 이름이 추출되고 대상이 SaveAs 경로에서 어셈블됩니다. 최종 대상을 알게 되면 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); 		} 	} 	else 	{ 		Response.Write("Please select a file to upload."); 	} }

맨 위로

응용 프로그램 테스트

Visual Studio .NET 솔루션을 빌드하고 응용 프로그램을 테스트하려면 다음과 같이 하십시오.

  1. 빌드 메뉴에서 솔루션 빌드를 누릅니다.
  2. 솔루션 탐색기 창에서 WebForm1.aspx를 마우스 오른쪽 단추로 누른 다음 브라우저에서 보기를 누릅니다.
  3. WebForm1.aspx가 브라우저에서 열리면 찾아보기를 누릅니다.
  4. 파일 선택 대화 상자에서 크기가 4MB보다 작은 파일을 선택한 다음 열기을 누릅니다.
  5. 파일을 업로드하려면 Upload를 누릅니다. 파일이 웹 서버에 업로드되고 “The file has been uploaded” 메시지가 나타납니다.
  6. 열려 있는 Windows 탐색기의 인스턴스로 돌아와서 Data 디렉터리를 찾습니다.
  7. 파일이 Data 디렉터리에 업로드되었는지 확인합니다.

맨 위로

큰 파일 업로드

기본적으로 ASP.NET에서는 크기가 4,096KB(또는 4MB) 이하인 파일만 웹 서버에 업로드할 수 있습니다. 이보다 큰 파일을 업로드하려면 Web.config 파일에서 <httpRuntime> 섹션의 maxRequestLength 매개 변수를 변경해야 합니다.

이 ASP.NET 응용 프로그램뿐만 아니라 모든 컴퓨터에 대해 이 설정을 변경하려면 Machine.config 파일을 수정해야 합니다.

기본적으로 <httpRuntime> 요소는 Machine.config 파일에서 다음과 같은 매개 변수로 설정되어 있습니다.

<httpRuntime  executionTimeout="90"  maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"  minFreeThreads="8"  minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />

Machine.config 파일은 C:\WINNT\Microsoft.NET\Framework\v1.0.3705\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); 		} 	} 	else 	{ 		Response.Write("Please select a file to upload."); 	} } 	} }

맨 위로

참조

자세한 내용을 보려면 다음 MSDN(Microsoft Developer Network) 웹 사이트를 방문하십시오.

<httpRuntime> 요소
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfhttpruntimesection.asp

INPUT 요소
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/input.asp

ENCTYPE 특성
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/enctype.asp

HtmlInputFile 클래스
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuihtmlcontrolshtmlinputfileclasstopic.asp

HtmlInputFile.PostedFile 속성
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIHtmlControlsHtmlInputFileClassPostedFileTopic.asp

맨 위로

ASP.NET 파일 업로드 하기

Filed under: ASP.NET — rothmans @ 5:55 pm

기존 ASP에서 클라이언트 컴퓨터에서 서버로 파일을 업로드하기 위해서는 개발자가 업로드에 관련된 컴포넌트를 직접 만들던가 타사 제품의 COM 컴포넌트(써드파티 컴포넌트)를 이용하여야 하였다. 가장 손쉬운 방법은 SA-FileUp이나 ASPUpload 같은 써드파티 컴포넌트를 사용하는 것이다. 이 컴포넌트를 보통 regsvr32.exe란 툴을 사용해서 등록한후에 ASP에서 사용할 수 있었다. 이를 하기 위해서는 로컬로서 접속하여야 하고 이 컴포넌트를 업데이트하거나 제거하기 위해서는 웹서버가 정지하여야 하였다. 또한 타사 제품이기 때문에 돈이 든다.

ASP.NET에서는 다른 COM 컴포넌트 필요없이 업로드를 할 수 있는 기능을 제공한다. 이는 닷넷 프레임웍의 HtmlInputFile 클래스를 통해서 구현된다. 이 클래스의 인스턴스를 생성하고나면 몇줄의 코드로서 업로드 기능을 구현할 수 있다. 이제 파일의 업로드에 대해서 알아보자. 또한 업로드 폴더 생성같은 부가적인 기능도 추가해보겠다.

파일경로 입력

파일을 업로드하기 위해서는 서버사이드 폼을 사용하여야 한다. 중요한점은 폼에 ENCTYPE=”Multipart/Form-Data” 속성이 명시되어야 한다. 다음으로 input 컨트롤을 추가하자.

<input type=”file” id=”ID” runat=”server” />

runat=”server”는 매우 중요하다. 이 컨트롤은 단순한 텍스트박스처럼 보인다. 하지만 runat=”server”로 인하여 서버컨트롤로 인식된다. Browse버튼을 누르면 로컬 컴퓨터의 파일을 선택할 수 있는 상자가 나타난다.

Form에 encType을 꼭 넣어주도록 하자. 그리고 HtmlInputFile 컨트롤과 그 아래에 버튼컨트롤과 파일의 이름등의 정보를 보여주는 레이블 컨트롤을 추가하였다. HtmlInputFile 컨트롤의 형식은 다음과 같다.

<Input
          Type=”File”
          RunAt=”Server”
          ID=”고유하게할 아이디”
          Accept=”MIME 인코딩”
          MaxLength=”파일의 최대크기 설정”
          Size=”파일경로를 입력받을 텍스트박스의 길이” >

이제 코드부분을 보도록 하자.

System.IO 네임스페이스를 추가하자.

업데이트할 디렉터리로 D:\Test로 지정하였다. 이 디렉터리가 있는지 또는 생성을 위해서 DirectoryInfo 클래스가 필요하다. 이때문에 System.IO 네임스페이스를 추가한 것이다. 폴더가 존재하지 않는다면 이 폴더를 생성하고 레이블에 생성하였다는 메시지를 출력한다.

이것은 Upload버튼을 눌렀을때의 이벤트 핸들러이다. 각각의 레이블에 해당하는 정보를 출력하도록 하고 GetFileName 메서드를 사용하여 파일 이름을 가져온다. 그리고 SaveAs 메서드를 사용하여 지정한 디렉터리에 가져온 파일이름으로 저장한다.

디렉터리가 존재하지 않을때 실행시킨 화면이다. 디렉터리가 생성되었다.

찾아보기 버튼을 누르면 로컬 컴퓨터의 파일을 선택할 수 있다.

선택하고 Upload버튼을 눌렀을때의 화면이다.

실제 폴더에 파일이 업로드 되었다.

제공 : 코리아인터넷닷컴, a 2002년 06월 28일
저자 : Tribikram Rath

ASP.NET 에서의 에러처리

Filed under: ASP.NET — rothmans @ 5:52 pm

ASP.NET 에서의 에러처리를 다루어 봅시다.

에러처리

web.config를 이용한 에러처리
기본적으로 에러가 발생했을 경우 redirect 페이지를 설정합니다.
400,500번대의 에러를 statecode로 정의 할 수 있습니다.

[ 소스코드]

"RemoteOnly" defaultRedirect="Error.aspx">     "404" redirect="not_found.aspx" />   statusCode가 정의 되어있으면 정의된 곳으로 아니면 기본적으로 defaultRedirect를 향합니다.

global.asax 에서의 에러처리
에러가 발생했을때의 페이지 이동은 간단히 web.config를 이용하면 됩니다.하지만
좀더 자세하게 에러 내용을 보고 싶다던지 그에 관한 상세적인 내용을 다루기 위해서는
global.asax를 이용하면 편리합니다.

[ Application_Error]

protected void Application_Error(Object sender, EventArgs e) {
Exception LastError = Server.GetLastError();
string errMsg = LastError.ToString();
string errSource = "source : "+LastError.Source;
string errTrack = "track : "+LastError.StackTrace;
string errMsg = "Message : "+LastError.Message;
string errTarget = "Target : "+LastError.TargetSite;
string logName = "ddarangLog";
string Message = "URL :" + Request.Path + "Error : " + errMsg;     //윈도우즈 이벤트로그에 작성하기
    if(!EventLog.Exists(logName))
    {
	EventLog.CreateEventSource(logName,logName);
    }
EventLog Log = new EventLog();
Log.Source = logName;
Log.WriteEntry(Message, EventLogEntryType.Information, 1);
Log.WriteEntry(Message, EventLogEntryType.Error, 2);
Log.WriteEntry(Message, EventLogEntryType.Warning, 3);
Log.WriteEntry(Message, EventLogEntryType.SuccessAudit, 4);
Log.WriteEntry(Message, EventLogEntryType.FailureAudit, 5);     //운영자에게 에러메일발송
ddarangUtil.SendMail("에러발생",Message,"1",Mailip);
}

trace에 관하여
trace를 활성하하면 응용 프로그램 내의 모든 페이제에 대한 추적 로그 출력이 가능합니다.
페이지 단위로 할 수도 있구 전체 프로젝트에 적용시킬 수도 있습니다.

페이지 단위는 페이지 지시자에 trace=”true”를 추가시킵니다.
모든 페이지 단위는 web.config를 이용합니다.

[ 소스코드]

<!--  응용 프로그램 수준 추적 로깅            응용 프로그램 수준 추적을 사용하면 응용 프로그램 내의 모든 페이지에 대한 추적 로그 출력이 가능합니다.             응용 프로그램 추적 로깅을 사용하려면 trace enabled="true"로 설정합니다. pageOutput="true"이면             각 페이지의 아래쪽에 추적 정보가 표시됩니다. 그렇지 않으면             웹 응용 프로그램 루트에서 "trace.axd" 페이지를 찾아서 응용 프로그램 추적 로그를            볼 수 있습니다.       -->
"false"         requestLimit="10"         pageOutput="true"         traceMode="SortByTime"         localOnly="false"     />
enabled 항목을 "true"로 설정하면 루트디렉토리에 trace.axd 파일이 생성됩니다. 이 파일은 xml로 구성이 되어져 있어서
브라우져에서 바로 확인이 가능합니다.  ex) http://localhost/ddarant/trace.axd
 

웹 사이트 파일 형식

Filed under: ASP.NET — rothmans @ 5:50 pm

ASP.NET에서 관리하는 파일 형식

ASP.NET에서 관리하는 파일 형식은 IIS의 Aspnet_isapi.dll에 매핑됩니다.

파일형식 위치 설명
.asax 응용 프로그램 루트 일반적으로 HttpApplication 클래스에서 파생되는 코드를 포함하고 응용 프로그램을 나타내는 Global.asax 파일입니다.
.ascx 응용 프로드램 루트 또는 하위 디렉터리 재 사용 가능한 사용자 정의 컨트롤을 정의하는 웹 사용자 정의 컨트롤 파일입니다.
.ashx 응용 프로그램 루트 또는 하위 디렉터리 들어오는 모든 요청을 처리할 IHpptHandler 인터페이스를 구현하는 코드가 포함된 제네릭 처리기 파일입니다.
.asmx 응용 프로그램 루트 또는 하위 디렉터리 SOAP를 통해 다른 웹 응용 프로그램에 사용할 수 있는 클래스와 메서드가 포함된 XML Web Service 파일입니다.
.aspx 응용 프로그램 루트 또는 하위 디렉터리 웹 컨트롤 및 기타 비지니스 논리를 포함할 수 있는 ASP.NET Web forms 파일입니다.
.axd 응용 프로그램 루트 추척 뷰어 파일이며 대개 Trace.axd입니다.
.browser App_Browsers 하위 디렉터리 클리이언트 브라우저에서 설정된 기능을 식별하는데 사용되는 브라우저 정의 파일입니다.
.cd 응용 프로그램 루트 또는 하위 디렉터리 글래스 다이어그램 파일입니다.
.compile Bin 하위 디렉터리 적절한 어셈블리를 가리키는 미리 컴파일된 스텀 파일입니다. 실행 파일 형식(.aspx, ascx, .master, 테마 파일)은 미리 컴파일되어 Bin 하위 디렉터리에 배치됩니다.
.config 응용 프로그램 루트 또는 하위 디렉터리 일반적으로 ASP.NET의 다양한 기능을 구현하는 설정을 가진 XML 요소가 포함된 Web.config 구성 파일입니다.
.cs, .jsl, .vb App_Code 하위 디렉터리이거나, ASP.NET 페이지에 대한 코드 숨김 파일인 경우에는 웹 페이지와 같은 디렉터리 런타임에 컴파일되는 클래스 소스 파일입니다. 클래스는 HTTP 모듈, HTTP 처리기 또는 ASP.NET 페이지의 코드 숨김 파일이 될 수 있습니다.
.csproj, .vcproj, .vjsproj Visual Studio 프로젝트 디렉터리 Visual Studio 클라이언트 응용 프로그램 프로젝트의 프로젝트 파일입니다.
.disco, .vsdisco App_WebReferences 하위 디렉터리 사용 가능한 웹 서비스를 찾는 데 사용되는 XML Web Service Discovery 파일입니다.
.dsdgm, .dsprototype 응용 프로그램 루트 또는 하위 디렉터리 웹 서비스 상호 작용의 아키텍처 뷰를 리버스 엔지니어링하기 위해 웹 서비스를 제공하거나 사용하는 Visual Studio 솔루션에 추가할 수 있는 DSD(분산 서비스 다이어그램) 파일입니다.
.dll Bin 하위 디렉터리 컴파일된 클래스 라이브러리 파일입니다. 또는 클래스의 소스 코드를 App_Code 하위 디렉터리에 배치할 수 도 있습니다.
.licx, .webinfo 응용 프로그램 루트 또는 하위 디렉터리 라이센스 파일입니다. 라이센스를 사용하면 컨트롤 작성자는 특정 사용자가 컨트롤을 사용할 수 있는 권한을 갖고 있는지 여부를 확인하여 지적 재산권을 보호할 수 있습니다.
.master 응용 프로그램 루트 또는 하위 디렉터리 마스터를 참조하는 응용 프로그램에서 다른 웹 페이지의 레이아웃을 정의하는 마스터 페이지입니다.
.mdb, .ldb App_Data 하위 디렉터리 Access 데이터베이스 파일입니다.
.mdf App_Data 하위 디렉터리 SQL 데이터베이스 파일입니다.
.msgx, .svc 응용 프로그램 또는 하위 디렉터리 Indigo MFx(Messaging Framework) 서비스 파일입니다.
.rem 응용 프로그램 또는 하위 디렉터리 원결 처리기 파일입니다.
.resources App_GlobalResources 또는 App_LocalResources 하위 디렉터리 이미지, 지역화할 수 있는 텍스트 또는 다른 데이터베이스를 참조하는 리소스 문자열이 포함된 리소스 파일입니다.
.resx App_GlobalResources 또는 App_LocalResources 하위 디렉터리 이미지, 지역화할 수 있는 텍스트 또는 다른 데이터베이스를 참조하는 리소스 문자열이 포함된 리소스 파일입니다.
.sdm, .sdmDocument 응용 프로그램 루트 또는 하위 디렉터리 SDM(시스템 정의 모델) 파일입니다.
.sitemap 응용 프로그램 루트 웹 사이트의 구조를 포함하는 사이트 멥 파일입니다. ASP.NET에는 사이트 맵 파일을 사용하여 탐색 컨트롤을 손쉽게 웹 페이지에 표시하는 기본 사이트 맵 공급자가 포함되어 있습니다.
.skin App_Theme 하위 디렉터리 표시 서식을 결정하는 데 사용되는 시킨파일입니다.
.sln Visual Web Developer 프로젝트 디렉토리 Visual Web Developer 프로젝트의 솔루션 파일입니다.
.soap 응용 프로그램 루트 또는 하위 디렉터리 SOAP 확장 파일입니다.

IIS에서 관리하는 파일 형식

IIS에서 관리하는 파일 형식은 일반적으로 asp.dll에 매핑됩니다.

파일 형식 위치 설명
.asa 응용 프로그램 루트 일반적으로 ASP 세션 또는 응용 프로그램 수명이 시작하거나 끝날 때 실행되는 선택적 메서드가 포함된 Global.asa 파일입니다.
.asp 응용 프로그램 루트 또는 하위 디렉터리 ASP 기본 제공 개체를 사용하는 스크립트  코드와 @ 지시문이 포함된 ASP 웹 페이지입니다.
.cdx App_Data 하위 디렉터리 Visual FaxPro의 복합 인덱스 파일 구조 파일입니다.
.cer 응용 프로그램 루트 또는 하위 디렉터리 웹 사이트를 인증하는 데 사용되는 인증서 파일입니다.
.idc 응용 프로그램 루트 또는 하위 디렉터리 httpobdc.dll에 매핑되는 인터넷 데이터베이스 커넥터 파일입니다.


* 참고:
IDC는 데이터 연결에 대해 충분한 보안을 제공하지 않으므로 사용되지 않습니다. IIS 6.0 이후 버전에서는 IDC가 포함되지 않을 예정입니다.
.shtm, .shtml, .stm 응용 프로그램 루트 또는 하위 디렉터리 ssinc.dll에 매핑됩니다.

정적 파일 형식

IIS는 MIME 형식 목록에 등록된 파일 이름 확장명을 사용하는 정적 파일만 지원합니다. 이 목록은 응용 프로그램의 MimeMap IIS 메타베이스 속성에 저장됩니다. 파일 형식이 응용 프로그램 확장명에 매핑되는 경우 파일을 정적 파일처럼 처리하려는 경우가 아니면 해당 파일 형식을 MiME 형식 목록에 포함할 필요가 없습니다. 일반적으로 ASP.NET 소스 코드 파일 형식을 MIME 형식 목록에 포함하면 브라우저에서 소스코드를 볼 수 있으므로 이렇게 하면 됩니다.

다음 표에는 등록된 파일 형식 중 일부만 보여 줍니다.

파일 형식 위치 설명
.css 응용 프로그램 루트 또는 하위 디렉터리 또는 App_Theme 하위 디렉터리 HTML 요소의 서직을 결정하는 데 사용되는 스타일시트 파일입니다.
.htm, .html 응용 프로그램 루트 또는 하위 디렉터리 HTML 코드로 작성된 정적 웹 파일입니다.

세션 타임아웃 잡아내기

Filed under: ASP.NET — rothmans @ 5:49 pm

public class basePageSessionExpire : System.Web.UI.Page
 {
    
public
basePageSessionExpire()
    {
    }

  override protected void OnInit(EventArgs e)
  {
      
base
.OnInit(e);

   if (Context.Session != null)
   {
 
    if
(Session.IsNewSession)
    {

     string szCookieHeader = Request.Headers["Cookie"
];
     // szCookieHeader = ASP.NET_SessionId=dj3225nlwjqk……
     
if ((null != szCookieHeader) && (szCookieHeader.IndexOf(“ASP.NET_SessionId”
) >= 0))
     {
      Response.Redirect(
“sessionTimeout.htm”
);
     }  
    } 
   }
  }
}

// 세션이 끊기면 sessionTimout.htm 이동합니다

랜덤으로 문자열을 만들어주는 함수

Filed under: ASP.NET — rothmans @ 5:43 pm

회원이 비밀번호를 분실했을때 소정의 인증절차를 통과했을 경우 임의로 암호를 바꿔서 메일로 보내줄때 필
요해서 작성해봤습니다.
예전에도 이 게시판에 클래스 형태로 작성해서 올렸었는데 클래스 사용에 익숙치 않은분이 많은것 같아서 함
수로 정의했습니다.

생성되는 문자열 범위는 [a-zA-Z0-9]입니다.
함수의 인수에 얻고자하는 범위를 숫자로 입력해서 호출하면 됩니다.
<%
”// ASP(VBScript)
Public Function RndStr(Lenth)
  Dim RanNum:
  Dim RanStr: RanStr = Null:
  Dim i:

  Randomize:

  For i=1 to Lenth
    Do
      RanNum = Round(Rnd * 1000, 0):

      if(RanNum>=48 and _
        RanNum<=122 and _
        (RanNum<=90 or RanNum>=97) and _
        (RanNum<=57 or RanNum>=65)) then
          Exit Do:
      end if
    Loop

    RanStr = RanStr & Chr(RanNum):
  Next

  RndStr = RanStr:
End Function

Dim r:
r = RndStr(10):
Response.Write r:
%>

// ASP.NET(C#) ———————————————-
public string RandomString(int strLen)
{
  int rnum=0;
  int i, j;
  string ranStr = null;

  System.Random ranNum = new System.Random();

  for(i=0; i<=strLen; i++)
  {
    for(j=48; j<=122; j++)
    {
      rnum = ranNum.Next(48,123);
      if(rnum>=48 && rnum<=122 && (rnum<=57 || rnum>=65) && (rnum<=90 || rnum>=97))
      {
        break;
      }
    }

    ranStr += Convert.ToChar(rnum);
  }

  return(ranStr);
}
// use ex.: Label1.Text = RandomString(10);

”// ASP.NET(VisualBasic) ———————————————-
Private Function RndStr(ByRef Length As Integer) As String
  Dim RanNum As Integer
  Dim RanStr As String
  Dim i% = 0

  Randomize

  For i=1 to Length
    Do
      RanNum = Fix(Rnd * 1000):

      If _
        (RanNum>=48) And _
        (RanNum<=122) And _
        (RanNum<=57 Or RanNum>=65) And _
        (RanNum<=90 Or RanNum>=97) _
        Then
        Exit Do
      End If
    Loop

    RanStr = RanStr & Chr(RanNum):
  Next

  RndStr = RanStr
End Function

Dim r As String
Dim len% = 10
r = RndStr(len)
Response.Write(r)

Base64 인코드 디코드

Filed under: ASP.NET — rothmans @ 5:42 pm

protected string Base64Encode(string str)
{
  return Convert.ToBase64String(
    System.Text.Encoding.GetEncoding(“euc-kr”).GetBytes(str)); 
}

protected string Base64Decode(string str)
{
  return System.Text.Encoding.GetEncoding(“euc-kr”).GetString(
    System.Convert.FromBase64String(str));
}

void Page_Load(Object src, EventArgs e )
{
  string str=”인코딩할 한글 1234567890!@#$%^&*()”;
  Response.Write( “인코딩 전 : ” + str +”<br>” );
  string encoded = Base64Encode(str);
  Response.Write( “BASE64 인코드 : ” + encoded +”<br>”);
  string decoded = Base64Decode(encoded);
  Response.Write( “BASE64 디코드 : ” + decoded +”<br>”);
}

Older Posts »

Blog at WordPress.com.