제목 : 파일업로드 연습(파일명 중복 처리) : UploadTest.aspx.cs
    
    
        
            
                | 
                    글번호:
                 | 
                
                 | 
                
                    218
                 | 
            
            
                | 
                    작성자:
                 | 
                
                 | 
                
                    
                        레드플러스
                        
                        
                    
                 | 
            
            
                | 
                    작성일:
                 | 
                
                 | 
                
                    
                        2005/09/06 오전 9:38:04 
                    
                 | 
            
            
            
                | 
                    조회수:
                 | 
                
                 | 
                
                    
                        4919
                    
                 | 
            
            
        
     
 
    
	
	
    
	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 Upload.Upload
{
    /// <summary>
    /// UploadTest에 대한 요약 설명입니다.
    /// </summary>
    public class UploadTest : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Button btnUpload;
        protected System.Web.UI.WebControls.Label lblDisplay;
        protected System.Web.UI.HtmlControls.HtmlInputFile fileUpload;
    
        private void Page_Load(object sender, System.EventArgs e)
        {
            // 여기에 사용자 코드를 배치하여 페이지를 초기화합니다.
        }
        #region Web Form 디자이너에서 생성한 코드
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: 이 호출은 ASP.NET Web Form 디자이너에 필요합니다.
            //
            InitializeComponent();
            base.OnInit(e);
        }
        
        /// <summary>
        /// 디자이너 지원에 필요한 메서드입니다.
        /// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
        /// </summary>
        private void InitializeComponent()
        {    
            this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
        private void btnUpload_Click(object sender, System.EventArgs e)
        {
            //변수 선언
            string strFileName = "";
            int intFileSize = 0;
            string strBaseDir = //"c:\\Files\\";//NTFS쓰기권한
                Server.MapPath(".") + "\\Files\\";
            //넘겨져온 파일이 있다면
            if(fileUpload.PostedFile != null){
                //즉, 파일의 크기/파일명길이가 0보다 클때 업로드
                if(fileUpload.PostedFile.ContentLength > 0
                    && 
                    fileUpload.PostedFile.FileName.Trim().Length>0){
                    //[1] 파일명 구하기
                    strFileName = 
                        System.IO.Path.GetFileName(
                            fileUpload.PostedFile.FileName);
                    //[2] 파일사이즈 구하기
                    intFileSize = 
                        fileUpload.PostedFile.ContentLength;
                    //[3] 업로드(지정된 폴더)
                    Response.Write(strBaseDir + strFileName);
                    //fileUpload.PostedFile.SaveAs(
                    //    strBaseDir + strFileName);//저장...
                    
                    //파일명 중복 처리 후 저장
                    fileUpload.PostedFile.SaveAs(
                            GetUinqueFileNameWithPath(
                                strBaseDir, strFileName)
                    );
                    //파일 다운로드 링크 1
                    lblDisplay.Text = 
                        String.Format("<a href='./Files/{0}'>{0}</a>"
                            , strFileName);
                    //강제 다운로드 링크 2
                    lblDisplay.Text +=  "<br />" +
                        String.Format(
                        "<a href='Down.aspx?FileName={0}'>{0}</a>"
                            , strFileName);
                }
            }
        }
        // 파일명 뒤에 번호 붙이는 메서드
        private string GetUinqueFileNameWithPath(
            string strBaseDirTemp, string strFileNameTemp)
        {
            int indexOfDot = strFileNameTemp.LastIndexOf(".");
            string strName = strFileNameTemp.Substring(0, indexOfDot);
            string strExt = strFileNameTemp.Substring(indexOfDot+1);
            bool blnExists = true;
            int i = 0;
            while(blnExists)
            {
                if(System.IO.File.Exists(strBaseDirTemp + strFileNameTemp))
                {
                    i++;
                    strFileNameTemp = strName + "(" + i + ")." + strExt;
                }
                else
                {
                    blnExists = false;
                }
            }
            return System.IO.Path.Combine(strBaseDirTemp, strFileNameTemp);
        }
    }
}