[go] go 언어에서 멀티파트 폼 데이터의 인코딩과 디코딩

멀티파트 폼 데이터는 웹 애플리케이션에서 파일 업로드 및 양식 데이터를 처리하는 데 사용됩니다. Go 언어에서 멀티파트 폼 데이터를 인코딩하고 디코딩하는 방법에 대해 알아보겠습니다.

멀티파트 폼 데이터 인코딩

멀티파트 폼 데이터를 인코딩하기 위해 mime/multipart 패키지를 사용할 수 있습니다. 예를 들어, 다음과 같이 bytes.Buffer에 멀티파트 폼 데이터를 인코딩할 수 있습니다.

package main

import (
	"bytes"
	"mime/multipart"
	"net/textproto"
	"io"
)

func main() {
	var b bytes.Buffer
	w := multipart.NewWriter(&b)

	// 텍스트 필드 추가
	w.WriteField("username", "john_doe")

	// 파일 추가
	part, _ := w.CreatePart(textproto.MIMEHeader{"Content-Type": []string{"application/octet-stream"}, "Content-Disposition": []string{`form-data; name="file"; filename="example.txt"`}})
	io.Copy(part, file)

	w.Close()
}

멀티파트 폼 데이터 디코딩

멀티파트 폼 데이터를 디코딩하기 위해서는 multipart.NewReader 함수를 사용하여 *multipart.Reader를 만들고 각 파트를 반복하여 처리할 수 있습니다. 아래 예제는 멀티파트 폼 데이터의 각 파트를 반복하면서 처리하는 방법을 보여줍니다.

package main

import (
	"mime/multipart"
	"net/http"
	"io"
)

func handler(w http.ResponseWriter, r *http.Request) {
	// 멀티파트 폼 데이터 파싱
	err := r.ParseMultipartForm(32 << 20) // 최대 32MB 데이터 처리 가능
	if err != nil {
		// 에러 처리
	}

	// 각 파트 처리
	for _, headers := range r.MultipartForm.File {
		for _, h := range headers {
			file, _ := h.Open()
			// 파일 처리
			defer file.Close()
		}
	}
}

멀티파트 폼 데이터를 다룰 때는 코드에서 발생할 수 있는 에러를 처리해야 합니다. 디코딩된 데이터를 안전하게 처리하고, 파일 업로드 시 보안을 고려해야 합니다.

멀티파트 폼 데이터를 다루는 방법은 해당 데이터의 속성에 따라 달라질 수 있으므로 상황에 맞게 적절한 처리를 해주어야 합니다.

참고 자료