2 回答

TA貢獻1843條經(jīng)驗 獲得超7個贊
我將 Dietrich Epp 的回答標(biāo)記為已接受,因為他給了我我所要求的。但是,評論中的 RedBlue 給了我真正需要的東西。謝謝你倆。下面的代碼只是從這個答案中修改了一點:https ://stackoverflow.com/a/56696333/2707357
將 url 變量更改為您的 DeepStack 服務(wù)器,并將文件名更改為實際存在的文件名,響應(yīng)主體應(yīng)返回必要的信息。
package main
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"mime/multipart"
"net/http"
"os"
)
func createMultipartFormData(fieldName, fileName string) (bytes.Buffer, *multipart.Writer) {
var b bytes.Buffer
var err error
w := multipart.NewWriter(&b)
var fw io.Writer
file := mustOpen(fileName)
if fw, err = w.CreateFormFile(fieldName, file.Name()); err != nil {
fmt.Println("Error: ", err)
}
if _, err = io.Copy(fw, file); err != nil {
fmt.Println("Error: ", err)
}
w.Close()
return b, w
}
func mustOpen(f string) *os.File {
r, err := os.Open(f)
if err != nil {
pwd, _ := os.Getwd()
fmt.Println("PWD: ", pwd)
panic(err)
}
return r
}
func main() {
url := "http://deepstack.local:82/v1/vision/custom/combined"
b, w := createMultipartFormData("image", "C:\\go_sort\\temp\\person.jpg")
req, err := http.NewRequest("POST", url, &b)
if err != nil {
return
}
// Don't forget to set the content type, this will contain the boundary.
req.Header.Set("Content-Type", w.FormDataContentType())
client := &http.Client{}
response, error := client.Do(req)
if err != nil {
panic(error)
}
defer response.Body.Close()
fmt.Println("response Status:", response.Status)
fmt.Println("response Headers:", response.Header)
body, _ := ioutil.ReadAll(response.Body)
fmt.Println("response Body:", string(body))
}

TA貢獻1799條經(jīng)驗 獲得超9個贊
真的是這么小的錯誤。據(jù)我所知,這就是你所有的問題:
var data []byte // with some value
jsonData := []byte(`{"image": ` + data + `}`)
您所要做的就是將其更改為使用append()或類似的東西:
jsonData := append(
append([]byte(`{"image": `), data...),
'}')
原因是你不能在 Go 中使用+連接。[]byte不過,您可以使用append()。
- 2 回答
- 0 關(guān)注
- 203 瀏覽
添加回答
舉報