>백엔드 개발 >Golang >Go를 사용하여 다중 부분/양식 데이터 POST 요청에서 파일 업로드를 올바르게 처리하는 방법은 무엇입니까?

Go를 사용하여 다중 부분/양식 데이터 POST 요청에서 파일 업로드를 올바르게 처리하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-01 07:32:11313검색

How to Properly Handle File Uploads in Multipart/Form-Data POST Requests with Go?

Go에서 Multipart/Form-Data POST 문제 해결

Go의 mime/multipart 및 http 패키지를 사용하여 멀티파트 양식을 보내는 맥락에서 다음과 같은 특정 문제가 발생할 수 있습니다. 문제 해결이 필요합니다. 파일 필드 생성과 관련된 구체적인 사례를 살펴보겠습니다.

문제

다음 코드가 있고 텍스트 필드와 파일이 모두 포함된 다중 부분 양식을 보내려고 합니다.

func main() {
    // ...

    // Create a file field
    fw, err := w.CreateFormFile("file", "filename.dat")
    if err != nil {
        return err
    }

    // ...

    // Send the request
    resp, err := http.Post(url, w.FormDataContentType(), &buffer)
    if err != nil {
        return err
    }

    // ...
}

그런데 파일 필드 Writer로 파일을 읽어오기 위해 Reader를 구하는 방법에 어려움을 겪고 계시나요? fw.

해결책

이 문제를 해결하려면 os.Open을 사용하여 파일을 열고 반환된 *os.File을 io.Writer로 CreateFormFile 함수에 전달해야 합니다. 수정된 코드는 다음과 같습니다.

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

func main() {
    // ...

    // Open the file
    fd, err := os.Open("filename.dat")
    if err != nil {
        return err
    }

    // Create a file field
    fw, err := w.CreateFormFile("file", "filename.dat")
    if err != nil {
        return err
    }

    // Copy the file contents into the file field writer
    _, err = io.Copy(fw, fd)
    if err != nil {
        return err
    }

    // ...

    // Send the request
    resp, err := http.Post(url, w.FormDataContentType(), &buffer)
    if err != nil {
        return err
    }

    // ...
}

이 수정을 통해 파일 내용이 멀티파트 양식에 올바르게 기록되어 텍스트 필드와 파일을 모두 성공적으로 보낼 수 있습니다.

위 내용은 Go를 사용하여 다중 부분/양식 데이터 POST 요청에서 파일 업로드를 올바르게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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