[go] mime/multipart 패키지를 활용한 멀티파트 폼 데이터의 파싱 과정
웹 애플리케이션을 개발하다 보면 파일 업로드와 같은 멀티파트(form-data) 형식의 HTTP 요청을 파싱해야 할 때가 있습니다. 이때 Go 언어에서는 mime/multipart
패키지를 사용하여 이러한 멀티파트 폼 데이터를 손쉽게 파싱할 수 있습니다.
멀티파트 데이터 파싱 방법
멀티파트 폼 데이터를 파싱하기 위해서는 다음의 단계를 거칩니다.
-
net/http
패키지를 사용하여 HTTP 요청을 받습니다. 예를 들어, 다음과 같이http.Request
객체를 받을 수 있습니다.func uploadHandler(w http.ResponseWriter, r *http.Request) { err := r.ParseMultipartForm(maxMemory) if err != nil { // 에러 처리 } defer r.MultipartForm.RemoveAll() // 멀티파트 폼 데이터 처리 }
-
r.MultipartReader()
메서드를 이용하여 멀티파트 리더를 생성합니다.mr, err := r.MultipartReader() if err != nil { // 에러 처리 }
-
NextPart()
메서드를 사용하여 각 파트를 차례대로 읽고 처리합니다.for { part, err := mr.NextPart() if err == io.EOF { break } if err != nil { // 에러 처리 } // 각 파트 처리 }
각 파트의 처리
멀티파트 데이터의 각 파트는 헤더와 실제 데이터(바디)로 구성되어 있습니다. 각 파트의 헤더는 textproto.MIMEHeader
형식으로, 실제 데이터는 io.Reader
형식으로 제공됩니다.
이러한 구성을 통해 개발자는 각 파트의 헤더를 통해 파일명, 콘텐츠 타입 등의 정보를 얻고, 해당 파트의 데이터를 읽어와서 필요한 처리를 할 수 있습니다.
위의 방법을 통해 mime/multipart
패키지를 사용하여 멀티파트 폼 데이터를 파싱할 수 있습니다. 이를 통해 파일 업로드나 기타 멀티파트 폼 데이터를 처리하는 기능을 손쉽게 구현할 수 있습니다.
참고 문헌
- 공식 Go 언어 문서: Go 패키지: mime/multipart
mime/multipart
패키지 문서: https://pkg.go.dev/mime/multipart