我希望我能解释清楚这一点。我正在尝试发出包含二进制数据(文件)的 HTTP 发布请求。这用于 DeepStack 图像处理。在 Python 中,我有以下工作:
image_data = open(file,"rb").read()
try:
response = requests.post("http://deepstack.local:82/v1/vision/detection",files={"image":image_data},timeout=15).json()
在 Go 中,我从这里的基本示例开始:https ://golangtutorial.dev/tips/http-post-json-go/
为我的使用稍微修改一下,相关行是:
data, err := ioutil.ReadFile(tempPath + file.Name())
if err != nil {
log.Print(err)
}
httpposturl := "http://deepstack.local:82/v1/vision/custom/combined"
fmt.Println("HTTP JSON POST URL:", httpposturl)
var jsonData = []byte(`{"image": ` + data + `}`)
request, error := http.NewRequest("POST", httpposturl, bytes.NewBuffer(jsonData))
request.Header.Set("Content-Type", "application/json; charset=UTF-8")
这会导致错误:
无效操作:`{"image": `+ 数据(类型不匹配的无类型字符串和 []byte)`
此时的“data”变量是[]uint8 ([]byte)。我从高层次上意识到出了什么问题。我正在尝试连接两种不同的数据类型。仅此而已。我已经尝试了很多东西,我敢肯定任何熟悉 Go 的人都会立即意识到这些东西是错误的(将 jsonData 声明为字节,将数据转换为字符串,使用 os.Open 而不是 ioutil.ReadFile 等)。不过,我只是有点盲目地跌跌撞撞。我找不到不使用纯字符串作为 JSON 数据的示例。
我将不胜感激任何想法。
蓝山帝景
扬帆大鱼
相关分类