본문 바로가기
asp.net

[펌] ASP.NET 멀티 파일 저장하기

by 사우람 2010. 7. 12.

ASP.NET 멀티 파일 저장하기

1. Introduction

서버 컨트롤로 간단하게 만들어진 예제이다. 개념적으로 정리 되어야 할 부분이 있다.
우리가  input type="file"  이 HtmlInputFile 컨트롤을 이용하여 멀티파일 페이지를 구현하고자 한다면
두개의 방법을 나누어 알아볼수 있다.

1. 파일 추가-->추가때마다 디스크에 저장-->모두 업로드
2. 파일 추가-->추가때마다 메모리에 저장-->모두 업로드

이렇게 파일로 저장해 놓고 파일 이름을 기억해 놓는방법 1번과 메모리에 저장하는 2번..
이렇게 2개의 방법이 있는것이다. 여기서 소개할 방법은 바로 2번의 방법을 사용하여 구
현한 폼을 보게 될 것이다. 웹application 성능상으로 보나 효율성으로 보나 추천하는 방법은
1번의 방법이다. 하지만 2번의 방법은 나름대로의 발상이 독특하다고 생각되어서 2번의
방법을 강좌로 택하게 되었다.

2. 준비하기

먼저 웹 IIS파일을 만들고 아래의 디자인처럼 컨트롤을 얹어보자.



- ListBox컨트롤  1개
- HtmlInputFile    1개
- Button             3개
- Label               1개

 

3. 주요 CODE 살펴보기

Step 1. 단일파일 메모리에 저장하기

static public ArrayList hif = new ArrayList();//Static파일 생성

...
...
...
#region 2. 파일 추가하기
        private void AddFile_Click(object sender, System.EventArgs e)
        {
            if (Page.IsPostBack == true)
            {
                //넘어온 파일 객체를 메모리에 저장해둔다.
                hif.Add(FindFile);
                ListBox1.Items.Add(FindFile.PostedFile.FileName);
            }
        }
#endregion

생성자 부분에 넘어온 HtmlInputFile 객체를 담아두는 ArrayList를 생성한다.

Step 2. 메모리의 파일 모두저장하기

#region 4. 파일을 모두 저장한다.
private void Button1_Click(object sender, System.EventArgs e)
{
    string baseLocation = Request.MapPath("attachments\\");//저장 폴더
    string status = "";//상태를 저장
            
    //만약 파일이 없다면..
    if(ListBox1.Items.Count == 0)
    {
        Label1.Text = "파일을 추가해주세요";
        return;
    }
    else
    {
        foreach(System.Web.UI.HtmlControls.HtmlInputFile HIF in hif)
        {
            try
            {
                string fn =
System.IO.Path.GetFileName(HIF.PostedFile.FileName);
                HIF.PostedFile.SaveAs(baseLocation + fn);
                filesUploaded++;
                status += fn + "
";
            }
            catch(Exception err)
            {
                Label1.Text = "파일을 저장하는데 에러가 발생하였습니다. " +
baseLocation +  "
" + err.ToString();
                return;
            }
        }
        if(filesUploaded == hif.Count)
        {
 
            Label1.Text = "모두 " +  filesUploaded + " 개의 파일이 업로드 되
습니다.
" + status;
        }
        hif.Clear();
        ListBox1.Items.Clear();
    }
}
#endregion

정리

앞서 소개한데로 멀티 파일을 저장하는데 결코 좋은 방법은 아니라는것을 말해 주고 싶다.하지만
이예제를 응용하여 객체를 저장하여 사용하는 방법을 다루고자 할때 좋은 예제가 될것이다.

 

 작성자 : HOONS(박경훈)
 
 이메일 : tajopkh@hanmail.net
 
 홈페이지 : http://www.hoonsbara.com