Go for Uploading Documents in Rossum API
This Go code shows how to upload a document automatically using Rossum API to a particular Rossum queue.
This Go code demonstrates how to upload a document using Rossum API to a particular Rossum queue. Set the options at the beginning of the script – they store your credentials, and also the identifier of the queue to upload in. You can find out the queue id by looking at your main screen URL, it is the number 12345 in https://example.rossum.app/annotations/12345
.
See the reference API documentation for more details about how to use the upload API.
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"log"
"mime/multipart"
"net/http"
"os"
"path"
)
type LoginResponse struct {
Key string `json:"key"`
}
func main() {
username := "[email protected]"
password := "secret_password"
queueId := "12345"
filePath := "/path/to/invoice.pdf"
authToken := authorize(username, password)
result := upload(queueId, filePath, authToken)
log.Println(result)
}
func authorize(username string, password string) string {
credentials := map[string]interface{}{
"username": username,
"password": password,
}
credentialsBytes, err := json.Marshal(credentials)
if err != nil {
log.Fatalln(err)
}
response, err := http.Post(
"https://example.rossum.app/api/v1/auth/login",
"application/json",
bytes.NewBuffer(credentialsBytes))
if err != nil {
log.Fatalln(err)
}
loginResponse := LoginResponse{}
json.NewDecoder(response.Body).Decode(&loginResponse)
return loginResponse.Key
}
func upload(queueId string, filePath string, authToken string) string {
// make request body
file, err := os.Open(filePath)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
var requestBody bytes.Buffer
multiPartWriter := multipart.NewWriter(&requestBody)
fileName := path.Base(filePath)
fileWriter, err := multiPartWriter.CreateFormFile("content", fileName)
if err != nil {
log.Fatalln(err)
}
_, err = io.Copy(fileWriter, file)
if err != nil {
log.Fatalln(err)
}
multiPartWriter.Close()
// make request
url := fmt.Sprintf("https://example.rossum.app/api/v1/queues/%s/upload", queueId)
req, err := http.NewRequest("POST", url, &requestBody)
if err != nil {
log.Fatalln(err)
}
req.Header.Set("Content-Type", multiPartWriter.FormDataContentType())
req.Header.Set("Authorization", fmt.Sprintf("token %s", authToken))
// perform the request and process the response
client := &http.Client{}
response, err := client.Do(req)
if err != nil {
log.Fatalln(err)
}
body, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatalln(err)
}
return string(body)
}
Updated about 1 year ago
What’s Next