這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Dynamsoft部署了基於REST的條碼服務。這裡分享下如何使用Go語言發送包含BASE64映像資料的HTTP POST請求。
環境配置
基本步驟
1. 讀取影像檔。
2. 把byte數群組轉換成base64字串。
3. JSON編碼。
4. 通過HTTP POST發送JSON資料。
5. 伺服器識別條碼返回結果。
6. JSON解碼擷取結果。
檔案讀取與BASE64轉換
使用Package ioutil讀取檔案:
import "io/ioutil"data, err := ioutil.ReadFile(filename)
Base64編碼。因為I/O比較耗時,可以放到goroutine中去執行。通過channel返回結果:
import "encoding/base64"channel <- base64.StdEncoding.EncodeToString(data)
JSON編解碼
先把資料存放區在map中:
base64data := <-channeldata := make(map[string]interface{})data["image"] = base64datadata["barcodeFormat"] = 234882047data["maxNumPerPage"] = 1
使用Package json編碼:
jsonData, err := json.Marshal(data)
返回結果JSON解碼:
result, _ := ioutil.ReadAll(resp.Body) // decode JSONconst resultKey = "displayValue"dec := json.NewDecoder(bytes.NewReader(result))for { t, err := dec.Token() if err == io.EOF { break } if err != nil { log.Fatal(err) } tmp := fmt.Sprintf("%v", t) if tmp == resultKey { t, _ := dec.Token() tmp := fmt.Sprintf("%v", t) fmt.Println("Barcode result: ", tmp) break }}
HTTP POST請求
使用Package http發送HTTP POST請求:
import "net/http"url := "http://demo1.dynamsoft.com/dbr/webservice/BarcodeReaderService.svc/Read"resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData))
測試
1. 擷取依賴包:
go get github.com/dynamsoft-dbr/golang/web-service
2. 在Go工程中匯入依賴:
import "github.com/dynamsoft-dbr/golang/web-service"
3. 建立main.go:
package main import ( "os" "fmt" "github.com/dynamsoft-dbr/golang/web-service") func main() { var filename string if len(os.Args) == 1 { fmt.Println("Please specify a file.") return } filename = os.Args[1] _, err := os.Stat(filename) if err != nil { fmt.Println(err) fmt.Println("Please specify a vailid file name.") return } channel := make(chan string) // read file to base64 go web_service.File2Base64(filename, channel) // read barcode with Dynamsoft web service web_service.ReadBarcode(channel) fmt.Println("Done.")}
4. 編譯運行程式:
go install<GOPATH>/bin/main <barcode image file>
源碼
https://github.com/dynamsoft-dbr/golang