Загрузить файл из нескольких частей, используя язык Go, который эквивалентен запросу curl - PullRequest
0 голосов
/ 13 сентября 2018

Ниже приведен мой пример запроса скручивания.

curl -X POST -F 'upload=@/home/user/file.txt' 'some_url' -H 'api: api_key' -H 'callback_url:callback_url'

Я хочу сделать то же самое на языке go. Может кто-нибудь, пожалуйста, помогите мне

Я попробовал фолловинг

package main

import (
"fmt"
"net/http"
"io/ioutil"
"os"
"log"
)

func main() {
 data, err := os.Open("file.txt")
 if err != nil {
        log.Fatal(err)
    }

req, _ := http.NewRequest("POST", "url", data)
req.Header.Set("api", "api_key")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

fmt.Println(string(body))

}

1 Ответ

0 голосов
/ 13 сентября 2018
package main

import (
"fmt"
"net/http"
"io/ioutil"
"os"
"log"
)

func main() {
    data, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }

    var b bytes.Buffer
    wr := multipart.NewWriter(&b)

    part, err := wr.CreateFormFile("upload", filepath.Base("file.text"))
    if err != nil {
        fmt.Println("do something")
    }
    _, err = io.Copy(part, data)

    wr.WriteField("api", "api_key")
    wr.WriteField("callback_url", "callback_url")

    wr.Close()

    req, _ := http.NewRequest("POST", "url", &b)
    req.Header.Set("api", "api_key")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(string(body))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...