2013. 1. 18. 15:00

'ASP.NET WebForm'에서는 간단하게 파일을 서버로 업로드 해 보겠습니다.

 

예제 환경 : .Net 4.0, ASP.NET WebForm

 

 

1. 프로젝트 생성

프로젝트를 생성하고 도구상자에서 'FileUpload'를 찾아 디자이너에 추가해 줍니다.

 

업로드를 위해서 버튼도 하나 추가하였습니다.

 

 

1. 업로드 코드 작성

이제 업로드를 위해서 코드를 작성하겠습니다.

업로드용 버튼에 다음과 같이 코드를 입력합니다.

protected void Button1_Click(object sender, EventArgs e)
{
	//동영상 업로드
	//0.파일이 있는지 확인
	if ((null == FileUpload1.PostedFile)
		|| (0 >= FileUpload1.PostedFile.ContentLength))
	{
		//파일이 선택되지 않았다.
		Response.Write("파일을 선택해 주세요");
		return;
	}

	//1.파일을 서버에 업로드 한다.

	//1-2.업로드
	//파일을 DB에 등록하기위한 저장프로시저
	spFileList_Add dbFileList_Add = new spFileList_Add();
	int nUserKey = CGlobal_BAPWeb.Session.UserKey;
	//업로드될 dir경로를 만든다.
	string sFileDir = HttpContext.Current.Server.MapPath(
						string.Format("~/userFiles/{0}/"
										, dbFileList_Add.Call(nUserKey).FileIndex));
	string sFileFull = sFileDir + string.Format(@"\{0}", FileUpload1.PostedFile.FileName);

	//디렉토리 생성확인
	if ( true == Directory.Exists(sFileDir))
	{//디렉토리가 있다.
		if (true == File.Exists(sFileFull))
		{//같은 파일이 있다!
			File.Delete(sFileFull);
		}
	}
	else
	{//디렉토리가 없다.
		//디렉토리 생성
		Directory.CreateDirectory(sFileDir);
	}

	try
	{
		//파일 업로드
		FileUpload1.PostedFile.SaveAs(sFileFull);
	}
	catch (Exception ex)
	{
		//오류다!
		Response.Write("파일을 업로드하던중 다음과 같은 오류가 발생 하였습니다\n오류내용 : "
						+ ex.ToString());
		return;
	}}//end Button1_Click

 

 

20번~23번 줄 : 업로드된 파일이 저장되는 서버의 물리적인 경로를 만들어 줍니다.

 

42번 줄 : 'FileUpload'컨트롤에서 넘어온 파일 데이터를 지정된 경로에 저장합니다.

 

 

2. 테스트

프로젝트를 실행하고 파일을 선택한 다음 업로드를 해봅시다.

파일을 선택한 후 버튼을 눌러 봅시다.

 

솔루션 탐색기를 확인해보니 파일이 제대로 업로드된걸 알 수 있습니다.

 

 

3. 주의 사항
3-1. enctype 추가

마이크로소프트에서 제공하는 샘플을 보면 '<from >'에 'enctype="multipart/form-data"'를 추가하라는 말이 나옵니다.

(참고 : Microsoft 고객센터 - HOWTO: Visual C# .NET을 사용하여 ASP.NET에서 웹 서버에 파일 업로드)

 

인코딩 타입을 지정하는 것입니다.

이걸 넣어야 제대로 작동하는 걸로 알고 있었는데 빼도 작동이 되는군요.

(디폴트값이 바뀐 건가 -_-a)

 

어찌됐건 파일을 업로드했는데 깨진다든지 하면 폼에 추가해 주시면 됩니다.

<form id="Form1" method="post" enctype="multipart/form-data" runat="server"> 

 

 

3-2. 폴더 권한 설정

원래 파일을 업로드하려면 웹서버에서 파일 쓰기 권한이 있어야 합니다.

이것도 마이크로소프트에서 제공하는 샘플에 언급이 되어 있습니다.

(참고 : Microsoft 고객센터 - HOWTO: Visual C# .NET을 사용하여 ASP.NET에서 웹 서버에 파일 업로드)

 

그런데 권한 없이도 잘 올라가는군요 ㅡ,.ㅡ;;;;

IIS7.0으로 오면서 권한이 통합된 건지 닷넷 4.0으로 오면서 권한이 통합된 건지는 모르겠지만 서버에 닷넷을 설치하면 생기던 'ASPNET' 계정도 보이질 않습니다.


만약 권한 관련 오류가 난다면 아래와 같이 하여 권한을 추가해 주세요.

 

 

3-3. 대용량 업로드 설정

만약 업로드에 실패한다면 IIS에서 용량 설정이 너무 작아서 그럴 수 있습니다.

아랫글을 참고하여 세팅해줍니다.

 

참고 : [IIS7] 대용량 파일 업로드를 위한 설정

 

 

마무리

서버로 파일 올리는 작업 자체는 쉽지만 권한이나 용량 설정에서 문제가 많이 발생합니다.

이건 진짜 경험이 해결해 주는 문제죠 ㅎㅎㅎ