Go에서 POST 요청으로 파일 업로드
HTTP POST 요청을 통해 파일을 업로드하는 것은 복잡한 작업이 될 수 있으며, 특히 세 번째 작업을 처리할 때 더욱 그렇습니다. Telegram과 같은 파티 API. 이 문제를 해결하기 위해 파일 업로드를 효율적으로 처리하는 Golang으로 작성된 사용자 정의 함수를 살펴보겠습니다.
문제:
Telegram에서 사진 누락을 나타내는 오류가 발생했습니다. 실패한 온라인 솔루션을 따른 후에도 요청에 포함됩니다.
코드 조각:
제공된 코드 조각은 os.Open() 함수를 사용하여 파일 업로드를 시도합니다. 하지만 Telegram의 특정 API 요구 사항으로 인해 실패합니다.
해결책:
이 문제를 해결하기 위해 멀티파트/양식을 활용하는 사용자 정의 sendPostRequest 함수를 생성합니다. 파일 업로드를 처리하기 위한 데이터 요청입니다. 이 방법은 웹 서버와 API에서 널리 지원됩니다. 업데이트된 코드는 다음과 같습니다.
<code class="go">import ( "bytes" "io" "mime/multipart" "net/http" "path/filepath" ) // content is a struct which contains a file's name, its type and its data. type content struct { fname string ftype string fdata []byte } func sendPostRequest(url string, files ...content) ([]byte, error) { var ( buf = new(bytes.Buffer) w = multipart.NewWriter(buf) ) for _, f := range files { part, err := w.CreateFormFile(f.ftype, filepath.Base(f.fname)) if err != nil { return []byte{}, err } _, err = part.Write(f.fdata) if err != nil { return []byte{}, err } } err := w.Close() if err != nil { return []byte{}, err } req, err := http.NewRequest("POST", url, buf) if err != nil { return []byte{}, err } req.Header.Add("Content-Type", w.FormDataContentType()) client := &http.Client{} res, err := client.Do(req) if err != nil { return []byte{}, err } defer res.Body.Close() cnt, err := io.ReadAll(res.Body) if err != nil { return []byte{}, err } return cnt, nil }</code>
해결 방법 이해:
sendPostRequest 함수는 URL과 다양한 수의 콘텐츠 구조체를 허용하며, 각각은 파일을 나타냅니다. 업로드되었습니다. 이는 각 파일이 해당 메타데이터(이름, 유형 및 데이터)와 함께 포함되는 다중 부분 HTTP 요청을 구성합니다. 이 형식은 Telegram API와의 호환성을 보장합니다.
사용 방법:
파일 정보로 sendPostRequest 함수를 호출하고 cnt 변수로 서버의 응답을 받을 수 있습니다. 예:
<code class="go">resp, err := sendPostRequest("https://your-url.com", content{fname: "photo.jpg", ftype: "image/jpeg", fdata: []byte{your_file_data}}) if err != nil { // Handle error }</code>
결론:
이 사용자 정의 sendPostRequest 함수는 Golang의 POST 요청을 통해 파일을 업로드하는 문제를 해결하며 특히 Telegram의 파일 업로드 요구 사항을 해결합니다. multipart/form-data를 사용하면 호환성이 보장되고 원격 서버에 파일을 업로드하기가 더 쉬워집니다.
위 내용은 Golang에서 POST 요청을 사용하여 텔레그램에 파일을 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!