Dynamsoft部署了基于REST的条形码服务。这里分享下如何使用Go语言发送包含BASE64图像数据的HTTP POST请求。
Go设置:GOROOT=E:/GoGOPATH=g:/gowork
1. 读取图像文件。
2. 把byte数组转换成base64字符串。
3. JSON编码。
4. 通过HTTP POST发送JSON数据。
5. 服务器识别条形码返回结果。
6. JSON解码获取结果。
使用Package ioutil读取文件:
import "io/ioutil"data, err := ioutil.ReadFile(filename)Base64编码。因为I/O比较耗时,可以放到goroutine中去执行。通过channel返回结果:
import "encoding/base64"channel <- base64.StdEncoding.EncodeToString(data)
先把数据存储在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 }}使用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-service2. 在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
新闻热点
疑难解答