방법: FileUpload 웹 서버 컨트롤을 사용하여 파일 업로드

Visual Studio 2010

업데이트: 2007년 11월

FileUpload 웹 서버 컨트롤을 사용하면 사용자가 자신의 컴퓨터에서 서버로 파일을 보낼 수 있게 됩니다. 업로드되는 파일은 다시 게시하는 동안 브라우저 요청의 일부로 서버에 전송됩니다. 파일 업로드가 완료한 후에는 코드에서 파일을 관리할 수 있습니다.

ms227669.alert_note(ko-kr,VS.100).gif참고:

업로드할 수 있는 파일의 최대 크기는 MaxRequestLength 구성 설정의 값에 따라 달라집니다. 사용자가 최대값보다 큰 파일을 업로드하려고 하면 업로드가 실패합니다.

FileUpload 웹 서버 컨트롤을 사용하여 파일을 업로드하려면

  1. 페이지에 FileUpload 컨트롤을 추가합니다.

    ms227669.alert_note(ko-kr,VS.100).gif참고:

    보안상의 이유로 FileUpload 컨트롤에 파일 이름을 미리 로드할 수는 없습니다.

  2. 페이지의 Load 이벤트 같은 이벤트의 처리기에서 다음을 수행합니다.

    1. FileUpload 컨트롤의 HasFile 속성을 테스트하여 이 컨트롤에 업로드된 파일이 있는지 확인합니다.

    2. 파일의 이름 또는 MIME 형식을 확인하여 사용자가 업로드한 파일이 허용하려는 파일인지 확인합니다. MIME 형식을 확인하려면 FileUpload 컨트롤의 PostedFile 속성으로 노출된 HttpPostedFile 개체를 가져옵니다. 그런 다음 게시된 파일의 ContentType 속성을 통해 MIME 형식을 확인할 수 있습니다.

      ms227669.alert_security(ko-kr,VS.100).gif보안 정보:

      일부 경우에는 업로드된 파일의 MIME 형식이 스푸핑되어 있을 수 있으므로 파일의 MIME 형식만 확인하는 것은 안전한 보안 검사가 아닙니다.

    3. 지정한 위치에 파일을 저장합니다. HttpPostedFile 개체의 SaveAs 메서드를 호출할 수 있습니다. 또한 HttpPostedFile 개체의 InputStream 속성을 사용하여 업로드된 파일을 바이트 배열이나 스트림으로 관리할 수 있습니다.

    다음 예제에서는 업로드된 파일에 대한 작업 방법을 보여 줍니다. 이 코드에서는 업로드된 파일의 파일 이름 확장명을 허용되는 파일 이름 확장명의 하드 코드된 목록과 비교하여 이 목록에 없는 형식의 파일은 모두 거부합니다. 그런 다음 확인된 파일을 현재 웹 사이트의 UploadedImages 폴더에 저장합니다. 업로드된 파일은 클라이언트 컴퓨터에서와 동일한 파일 이름으로 저장됩니다. HttpPostedFile 개체의 FileName 속성은 클라이언트 컴퓨터에서의 전체 파일 경로를 반환하므로 FileUpload 컨트롤의 FileName 속성이 사용됩니다.

    ms227669.alert_security(ko-kr,VS.100).gif보안 정보:

    저장한 파일의 경로와 이름은 사용자에게 표시하지 마십시오. 악의적인 사용자가 악용할 수 있는 정보가 노출될 수 있습니다.

    Protected Sub Page_Load(ByVal sender As Object, 
            ByVal e As System.EventArgs) Handles Me.Load
        If IsPostBack Then
            Dim path As String = Server.MapPath("~/UploadedImages/")
            Dim fileOK As Boolean = False
            If FileUpload1.HasFile Then
                Dim fileExtension As String
                fileExtension = System.IO.Path. _
                    GetExtension(FileUpload1.FileName).ToLower()
                Dim allowedExtensions As String() = _
                    {".jpg", ".jpeg", ".png", ".gif"}
                For i As Integer = 0 To allowedExtensions.Length - 1
                    If fileExtension = allowedExtensions(i) Then
                       fileOK = True
                    End If
                Next
                If fileOK Then
                    Try
                        FileUpload1.PostedFile.SaveAs(path & _
                             FileUpload1.FileName)
                        Label1.Text = "File uploaded!"
                    Catch ex As Exception
                        Label1.Text = "File could not be uploaded."
                    End Try
                Else
                    Label1.Text = "Cannot accept files of this type."
                End If
            End If
        End If
    End Sub
    
    
    

    protected void Page_Load(object sender, EventArgs e)
    {
        if(IsPostBack)
        {
            Boolean fileOK = false;
            String path = Server.MapPath("~/UploadedImages/");
            if (FileUpload1.HasFile) 
            {
                String fileExtension = 
                    System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
                String[] allowedExtensions = 
                    {".gif", ".png", ".jpeg", ".jpg"};
              for (int i = 0; i < allowedExtensions.Length; i++)
              {
                   if (fileExtension == allowedExtensions[i])
                   {
                        fileOK = true;
                   }
              }
            }
    
            if (fileOK)
            {
                try
                {
                    FileUpload1.PostedFile.SaveAs(path 
                        + FileUpload1.FileName);
                    Label1.Text = "File uploaded!";
                }
                catch (Exception ex)
                {
                    Label1.Text = "File could not be uploaded.";
                }
            }
            else
            {
                Label1.Text = "Cannot accept files of this type.";
            }
        }
    }
    
표시: