Go에서 POST 요청으로 파일 업로드
POST 요청을 통해 파일을 업로드하는 것은 웹 애플리케이션을 개발할 때 일반적인 작업입니다. 이는 API 호출의 일부로 파일을 업로드해야 하는 Telegram 봇으로 작업할 때 더욱 중요해집니다.
안타깝게도 간단한 http.Post 기능을 사용하면 "잘못된 요청: 없습니다."와 같은 오류가 발생할 수 있습니다. 요청에 사진이 있습니다." 이 문제를 해결하려면 multipart/form-data 콘텐츠 유형을 사용하여 파일을 보내야 합니다. 이를 달성하는 방법은 다음과 같습니다.
콘텐츠 구조 생성:
파일의 메타데이터와 데이터를 나타내는 콘텐츠 구조를 정의합니다.
<code class="go">type content struct { fname string ftype string fdata []byte }</code>
Multipart Form Builder:
multipart.NewWriter를 사용하여 새로운 다중 부분 Form Builder를 만듭니다.
<code class="go">var buf = new(bytes.Buffer) var w multipart.NewWriter(buf)</code>
파일 데이터 추가:
업로드해야 하는 파일을 반복하고 각 파일에 대한 양식 부분을 만듭니다.
<code class="go">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 } }</code>
양식 닫기:
모든 파일을 추가한 후 다중 부분 양식 작성기를 닫습니다.
<code class="go">err := w.Close() if err != nil { return []byte{}, err }</code>
HTTP 요청 생성:
http.NewRequest를 사용하여 새 HTTP 요청 생성:
<code class="go">req, err := http.NewRequest("POST", url, buf) if err != nil { return []byte{}, err }</code>
콘텐츠 유형 설정:
Multipart/form-data를 보내고 있음을 나타내도록 Content-Type 헤더를 설정합니다.
<code class="go">req.Header.Add("Content-Type", w.FormDataContentType())</code>
요청 보내기:
HTTP 클라이언트를 사용하여 HTTP 요청 보내기:
<code class="go">client := &http.Client{} res, err := client.Do(req) if err != nil { return []byte{}, err }</code>
응답 읽기:
응답 본문 읽기:
<code class="go">cnt, err := io.ReadAll(res.Body) if err != nil { return []byte{}, err }</code>
이 단계를 따르면 Telegram 봇 작업을 포함하여 Go에서 POST 요청을 사용하여 파일을 성공적으로 업로드할 수 있습니다.
위 내용은 Go에서 POST 요청으로 파일을 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!