This commit is contained in:
118
docs/snippets/go/docker/usage.go
Normal file
118
docs/snippets/go/docker/usage.go
Normal file
@@ -0,0 +1,118 @@
|
||||
```go title="usage.go"
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"time"
|
||||
)
|
||||
|
||||
type DockerKreuzbergClient struct {
|
||||
containerName string
|
||||
containerImage string
|
||||
apiPort int
|
||||
}
|
||||
|
||||
func NewDockerKreuzbergClient(containerName, image string, port int) *DockerKreuzbergClient {
|
||||
return &DockerKreuzbergClient{
|
||||
containerName: containerName,
|
||||
containerImage: image,
|
||||
apiPort: port,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *DockerKreuzbergClient) StartContainer() error {
|
||||
fmt.Println("Starting Kreuzberg Docker container...")
|
||||
cmd := exec.Command("docker", "run", "-d",
|
||||
"--name", c.containerName,
|
||||
"-p", fmt.Sprintf("%d:8000", c.apiPort),
|
||||
c.containerImage)
|
||||
|
||||
if err := cmd.Run(); err != nil {
|
||||
return fmt.Errorf("failed to start container: %w", err)
|
||||
}
|
||||
|
||||
fmt.Printf("Container started on http://localhost:%d\n", c.apiPort)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *DockerKreuzbergClient) ExtractFile(filePath string) (string, error) {
|
||||
fileBytes, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
writer := multipart.NewWriter(&buf)
|
||||
|
||||
part, err := writer.CreateFormFile("file", filepath.Base(filePath))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if _, err := io.Copy(part, bytes.NewReader(fileBytes)); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if err := writer.Close(); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
resp, err := http.Post(
|
||||
fmt.Sprintf("http://localhost:%d/api/extract", c.apiPort),
|
||||
writer.FormDataContentType(),
|
||||
&buf,
|
||||
)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var result map[string]string
|
||||
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return result["content"], nil
|
||||
}
|
||||
|
||||
func (c *DockerKreuzbergClient) StopContainer() error {
|
||||
fmt.Println("Stopping Kreuzberg Docker container...")
|
||||
if err := exec.Command("docker", "stop", c.containerName).Run(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := exec.Command("docker", "rm", c.containerName).Run(); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println("Container stopped and removed")
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
client := NewDockerKreuzbergClient("kreuzberg-api", "kreuzberg:latest", 8000)
|
||||
|
||||
if err := client.StartContainer(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
content, err := client.ExtractFile("document.pdf")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Printf("Extracted content:\n%s\n", content)
|
||||
|
||||
if err := client.StopContainer(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user