Upload a file with POST request golang
18,995
After some digging I figured it out with this
func SendPostRequest (url string, filename string, filetype string) []byte {
file, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile(filetype, filepath.Base(file.Name()))
if err != nil {
log.Fatal(err)
}
io.Copy(part, file)
writer.Close()
request, err := http.NewRequest("POST", url, body)
if err != nil {
log.Fatal(err)
}
request.Header.Add("Content-Type", writer.FormDataContentType())
client := &http.Client{}
response, err := client.Do(request)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
content, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
return content
}
Related videos on Youtube
Author by
NicoNex
Updated on October 12, 2022Comments
-
NicoNex over 1 year
I'm new to golang and I'm trying to write a function that uploads a file with a post request to telegram for a bot I'm writing.
I've tried with this code but the error I'm getting from telegram is
Bad Request: there is no photo in the request
.I've searched on the net for how to do that, but none of what I found helped me through the problem.
func SendPostRequest (url string, filename string) []byte { file, err := os.Open(filename) if err != nil { log.Fatal(err) } defer file.Close() response, err := http.Post(url, "binary/octet-stream", file) if err != nil { log.Fatal(err) } defer response.Body.Close() content, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } return content }
The function I'm calling the SendPostRequest from is
func (e Engine) SendPhoto (filename string, chatId int64) APIResponse { var url = fmt.Sprintf("%ssendPhoto?chat_id=%d", e.baseUrl, chatId) var content []byte = SendPostRequest(url, filename) var response APIResponse json.Unmarshal(content, &response) return response }
EDIT: The link to the Telegram bot api I'm using in the code is https://core.telegram.org/bots/api
And the api method is https://core.telegram.org/bots/api#sendphoto
-
Michael Hampton almost 6 yearsThe docs say to upload the file with multipart/form-data.
-
NicoNex almost 6 years@ttomalak could you please explain me how to set the photo parameter name in the request?
-