[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()
}
}
}
멀티파트 폼 데이터를 다룰 때는 코드에서 발생할 수 있는 에러를 처리해야 합니다. 디코딩된 데이터를 안전하게 처리하고, 파일 업로드 시 보안을 고려해야 합니다.
멀티파트 폼 데이터를 다루는 방법은 해당 데이터의 속성에 따라 달라질 수 있으므로 상황에 맞게 적절한 처리를 해주어야 합니다.