Dynamsoft has deployed a REST web service for barcode detection. This post shares how to call the service by sending HTTP POST request using Golang.
Barcode Detection in Golang
Environment
- IDE: JetBrain Gogland.
- Go 1.7.4.
- Windows 10.
- Workspace structure:
<GOPATH> - src - bin - pkg
- Settings:
GOROOT=E:\Go GOPATH=g:\gowork
Basic Steps to Call Barcode Web Service
- Read an image file as bytes.
- Convert the bytes to a base64 string.
- Encode the base64 string as JSON string.
- Send HTTP POST request with JSON.
- Get HTTP response.
- Decode response body as JSON and get the barcode detection result.
Read File and Encode as Base64
Read an image file as bytes with Package ioutil:
import "io/ioutil" data, err := ioutil.ReadFile(filename)
Encode bytes as base64 with Package base64. When using goroutine for I/O, you can use a channel to send and receive values:
import "encoding/base64" channel <- base64.StdEncoding.EncodeToString(data)
Encode and Decode JSON
Store data in a map:
base64data := <-channel data := make(map[string]interface{}) data["image"] = base64data data["barcodeFormat"] = 234882047 data["maxNumPerPage"] = 1
Generate the JSON encoding of the map with Package json:
jsonData, err := json.Marshal(data)
Decode JSON to get the barcode result with Token:
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 Request
Send HTTP request with Package http:
import "net/http" url := "http://demo1.dynamsoft.com/dbr/webservice/BarcodeReaderService.svc/Read" resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData))
Demo
- Get the package:
go get github.com/dynamsoft-dbr/golang/web-service
- Import the package to a Go project:
import "github.com/dynamsoft-dbr/golang/web-service"
- Create 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.") }
- Build and run the console app:
go install <GOPATH>/bin/main <barcode image file>
Source Code
https://github.com/dynamsoft-dbr/golang
The post HTTP POST Request with Base64 Barcode Image in Golang appeared first on Code Pool.