Dynamsoft部署了基于REST的条形码服务。这里分享下如何使用Go语言发送包含BASE64图像数据的HTTP POST请求。
环境配置
- IDE: JetBrain Gogland.
- Go 1.7.4.
- Windows 10.
- 工作目录结构:
<GOPATH> - src - bin - pkg
- Go设置:
GOROOT=E:\Go GOPATH=g:\gowork
基本步骤
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 := <-channel
data := make(map[string]interface{})
data["image"] = base64data
data["barcodeFormat"] = 234882047
data["maxNumPerPage"] = 1
使用Package json编码:
jsonData, err := json.Marshal(data)
返回结果JSON解码:
result, _ := ioutil.ReadAll(resp.Body)
// decode JSON
const 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