第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 golang 中包含二進制數(shù)據(jù)的 HTTP Post

在 golang 中包含二進制數(shù)據(jù)的 HTTP Post

Go
牧羊人nacy 2022-12-26 10:51:24
我希望我能解釋清楚這一點。我正在嘗試發(fā)出包含二進制數(shù)據(jù)(文件)的 HTTP 發(fā)布請求。這用于 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/為我的使用稍微修改一下,相關(guān)行是:    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")這會導(dǎo)致錯誤:無效操作:`{"image": `+ 數(shù)據(jù)(類型不匹配的無類型字符串和 []byte)`此時的“data”變量是[]uint8 ([]byte)。我從高層次上意識到出了什么問題。我正在嘗試連接兩種不同的數(shù)據(jù)類型。僅此而已。我已經(jīng)嘗試了很多東西,我敢肯定任何熟悉 Go 的人都會立即意識到這些東西是錯誤的(將 jsonData 聲明為字節(jié),將數(shù)據(jù)轉(zhuǎn)換為字符串,使用 os.Open 而不是 ioutil.ReadFile 等)。不過,我只是有點盲目地跌跌撞撞。我找不到不使用純字符串作為 JSON 數(shù)據(jù)的示例。我將不勝感激任何想法。
查看完整描述

2 回答

?
藍(lán)山帝景

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))

}



查看完整回答
反對 回復(fù) 2022-12-26
?
揚帆大魚

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()。


查看完整回答
反對 回復(fù) 2022-12-26
  • 2 回答
  • 0 關(guān)注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號