>  기사  >  백엔드 개발  >  Go의 HTTP 요청에서 파일과 JSON을 구문 분석하는 방법

Go의 HTTP 요청에서 파일과 JSON을 구문 분석하는 방법

DDD
DDD원래의
2024-10-24 22:12:02725검색

How to Parse Files and JSON from HTTP Requests in Go

Go의 HTTP 요청에서 파일 및 JSON 구문 분석

AngularJS 프런트 엔드에서 HTTP 요청을 생성할 때 다음이 필요할 수 있습니다. 파일과 JSON 데이터를 모두 구문 분석합니다. 이는 특히 요청 본문에서 JSON 데이터를 구문 분석하려고 할 때 어려울 수 있습니다.

다음 HTTP 요청 페이로드를 고려하세요.

Content-Disposition: form-data; name="file"; filename="Parent Handbook.pdf"
Content-Type: application/pdf

Content-Disposition: form-data; name="doc"
{"title":"test","cat":"test cat","date":20142323}

이 시나리오에서 "파일"은 PDF를 나타냅니다. document, "doc"에는 구문 분석하려는 JSON 데이터가 포함되어 있습니다.

파일과 JSON 데이터를 모두 효과적으로 구문 분석하기 위해 Go는 적합한 솔루션을 제공합니다. 이를 달성하는 방법은 다음과 같습니다.

r.Body에 JSON 데이터가 포함되어 있다고 가정하는 대신 r.MultipartReader()를 활용하여 PDF와 JSON 부분을 모두 별도로 처리해야 합니다. 이 함수는 r.NextPart()를 사용하여 요청의 여러 부분을 반복할 수 있는 mime/multipart.Reader 개체를 제공합니다.

수정된 핸들러 함수의 예는 다음과 같습니다.

<code class="go">func (s *Server) PostFileHandler(w http.ResponseWriter, r *http.Request) {
    mr, err := r.MultipartReader()
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    doc := Doc{}
    for {
        part, err := mr.NextPart()

        // No more parts
        if err == io.EOF {
            break
        }

        // Error occurred
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }

        // PDF 'file' part
        if part.FormName() == "file" {
            doc.Url = part.FileName()
            outfile, err := os.Create("./docs/" + part.FileName())
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
            defer outfile.Close()

            _, err = io.Copy(outfile, part)
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
        }

        // JSON 'doc' part
        if part.FormName() == "doc" {
            jsonDecoder := json.NewDecoder(part)
            err = jsonDecoder.Decode(&doc)
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }</code>

위 내용은 Go의 HTTP 요청에서 파일과 JSON을 구문 분석하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.