[go] mime/multipart 패키지를 활용한 멀티파트 폼 데이터의 파싱 과정

웹 애플리케이션을 개발하다 보면 파일 업로드와 같은 멀티파트(form-data) 형식의 HTTP 요청을 파싱해야 할 때가 있습니다. 이때 Go 언어에서는 mime/multipart 패키지를 사용하여 이러한 멀티파트 폼 데이터를 손쉽게 파싱할 수 있습니다.

멀티파트 데이터 파싱 방법

멀티파트 폼 데이터를 파싱하기 위해서는 다음의 단계를 거칩니다.

  1. net/http 패키지를 사용하여 HTTP 요청을 받습니다. 예를 들어, 다음과 같이 http.Request 객체를 받을 수 있습니다.

    func uploadHandler(w http.ResponseWriter, r *http.Request) {
        err := r.ParseMultipartForm(maxMemory) 
        if err != nil {
            // 에러 처리
        }
        defer r.MultipartForm.RemoveAll()
        // 멀티파트 폼 데이터 처리
    }
    
  2. r.MultipartReader() 메서드를 이용하여 멀티파트 리더를 생성합니다.

    mr, err := r.MultipartReader()
    if err != nil {
        // 에러 처리
    }
    
  3. NextPart() 메서드를 사용하여 각 파트를 차례대로 읽고 처리합니다.

    for {
        part, err := mr.NextPart()
        if err == io.EOF {
            break
        }
        if err != nil {
            // 에러 처리
        }
        // 각 파트 처리
    }
    

각 파트의 처리

멀티파트 데이터의 각 파트는 헤더와 실제 데이터(바디)로 구성되어 있습니다. 각 파트의 헤더는 textproto.MIMEHeader 형식으로, 실제 데이터는 io.Reader 형식으로 제공됩니다.

이러한 구성을 통해 개발자는 각 파트의 헤더를 통해 파일명, 콘텐츠 타입 등의 정보를 얻고, 해당 파트의 데이터를 읽어와서 필요한 처리를 할 수 있습니다.

위의 방법을 통해 mime/multipart 패키지를 사용하여 멀티파트 폼 데이터를 파싱할 수 있습니다. 이를 통해 파일 업로드나 기타 멀티파트 폼 데이터를 처리하는 기능을 손쉽게 구현할 수 있습니다.

참고 문헌