uploader

package module
v1.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 18, 2026 License: MIT Imports: 22 Imported by: 0

README

Go Uploader Client

Simple Go client for talking to the upload-service.

Installation

go get github.com/alkuinvito/uploader

Creating the client

import (
    "net/http"

    "github.com/alkuinvito/uploader"
)

func main() {
    // Easiest way
    client := uploader.NewClientWithDefaults(
        "https://uploads.yourcompany.com/api/v1", // endpoint
        "YOUR_API_KEY",                           // access key
    )

    // Or with custom options
    opts := &uploader.UploadClientOptions{
        AccessKey:  "YOUR_API_KEY",
        ChunkSize:  1024 * 1024, // 1 MB
        Endpoint:   "https://uploads.yourcompany.com/api/v1",
        HTTPClient: &http.Client{},
    }

    client = uploader.NewClient(opts)

    _ = client
}

PutObject

Upload with chunked blob
import (
    "fmt"
    "log"
    "os"

    "github.com/alkuinvito/uploader"
)

func main() {
    client := uploader.NewClientWithDefaults(
        "https://uploads.yourcompany.com/api/v1",
        "YOUR_API_KEY",
    )

    // Read file into bytes (example)
    data, err := os.ReadFile("local-file.txt")
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.PutObject("your_bucket", "path/to/file.txt", data, &uploader.UploadOptions{
        ChecksumAlgorithm: uploader.Sha256Sum,
        OnProgress: func(uploaded, total int64) {
            fmt.Printf("uploaded %d / %d bytes\n", uploaded, total)
        },
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("checksum:", res.Checksum, "size:", res.Size)
}

PutObjectForm

Upload with form file in single request
import (
    "fmt"
    "log"
    "os"

    "github.com/alkuinvito/uploader"
)

func main() {
    client := uploader.NewClientWithDefaults(
        "https://uploads.yourcompany.com/api/v1",
        "YOUR_API_KEY",
    )

    // Read file into bytes (example)
    data, err := os.ReadFile("local-file.txt")
    if err != nil {
        log.Fatal(err)
    }

    path, err := client.PutObjectForm("your_bucket", "path/to/file.txt", data)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("uploaded path", path)
}

Get object

import (
    "fmt"
    "log"

    "github.com/alkuinvito/uploader"
)

func main() {
    client := uploader.NewClientWithDefaults(
        "https://uploads.yourcompany.com/api/v1",
        "YOUR_API_KEY",
    )

    data, err := client.GetObject("your_bucket", "path/to/file.txt")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("downloaded bytes:", len(data))
}

Stat object

import (
    "fmt"
    "log"

    "github.com/alkuinvito/uploader"
)

func main() {
    client := uploader.NewClientWithDefaults(
        "https://uploads.yourcompany.com/api/v1",
        "YOUR_API_KEY",
    )

    object, err := client.StatObject("your_bucket", "path/to/file.txt")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("name:", object.Name, "size:", object.Size)
}

List objects

import (
    "fmt"
    "log"

    "github.com/alkuinvito/uploader"
)

func main() {
    client := uploader.NewClientWithDefaults(
        "https://uploads.yourcompany.com/api/v1",
        "YOUR_API_KEY",
    )

    objects, err := client.ListObjects("your_bucket", "path/to/", 100)
    if err != nil {
        log.Fatal(err)
    }

    for _, object := range objects {
        fmt.Println("name:", object.Name, "size:", object.Size)
    }
}

Delete object

import (
    "log"

    "github.com/alkuinvito/uploader"
)

func main() {
    client := uploader.NewClientWithDefaults(
        "https://uploads.yourcompany.com/api/v1",
        "YOUR_API_KEY",
    )

    if err := client.DeleteObject("your_bucket", "path/to/file.txt"); err != nil {
        log.Fatal(err)
    }
}

Documentation

Index

Constants

View Source
const (
	Md5Sum    = "md5"
	Sha256Sum = "sha256"
)

Variables

View Source
var (
	// Server errors
	ErrBucketNotFound             = errors.New("bucket not found")
	ErrChecksumMismatch           = errors.New("checksum verification failed")
	ErrObjectNotFound             = errors.New("object not found")
	ErrObjectFailedToCreateDir    = errors.New("failed to create directory")
	ErrObjectFailedToCreateObject = errors.New("failed to create object")
	ErrObjectFailedToOpen         = errors.New("failed to open object")
	ErrObjectInvalidDataURI       = errors.New("invalid data URI")
	ErrParseResponseFailed        = errors.New("failed to parse server response")
	ErrResourceNotFound           = errors.New("resource not found")
	ErrUnauthorized               = errors.New("unauthorized")
	ErrUnknown                    = errors.New("unknown server error")

	// Client errors
	ErrFailedToConnect          = errors.New("failed to connect to server")
	ErrFailedToParseRequest     = errors.New("failed to parse request")
	ErrClientFailedToReadObject = errors.New("failed to read object")
	ErrUnsupportedAlgorithm     = errors.New("unsupported algorithm")
	ErrClientUploadFailed       = errors.New("upload failed")
)

Functions

This section is empty.

Types

type CreatePresignedUrlOptions added in v1.0.5

type CreatePresignedUrlOptions struct {
	AllowedTypes []string
	ExpiresIn    int
}

type IUploadClient

type IUploadClient interface {
	CreatePresignedUrl(bucketName, objectName string, action PresignedAction, options *CreatePresignedUrlOptions) (string, error)
	DeleteObject(bucketName, objectName string) error
	DownloadObject(bucketName, objectName string, w io.Writer) error
	GetObject(bucketName, objectName string) ([]byte, error)
	ListObjects(bucketName, path string) ([]ObjectInfo, error)

	PutObject(bucketName, objectName string, data []byte, opts *UploadOptions) (*UploadResult, error)
	PutObjectV2(ctx context.Context, bucketName, objectName string, data []byte, opts *UploadOptions) (*UploadResult, error)
	PutObjectForm(bucketName, objectName string, data []byte) (string, error)
	PutObjectFormV2(ctx context.Context, bucketName, objectName string, data []byte) (string, error)

	StatObject(bucketName, objectName string) (*ObjectInfo, error)
	// contains filtered or unexported methods
}

type ObjectInfo added in v1.0.1

type ObjectInfo struct {
	Name     string `json:"name"`
	Size     int64  `json:"size"`
	Modified string `json:"modified"`
}

type PresignedAction added in v1.0.5

type PresignedAction string
const (
	PresignedDownload PresignedAction = "GET"
	PresignedUpload   PresignedAction = "PUT"
)

type UploadClient

type UploadClient struct {
	// contains filtered or unexported fields
}

func NewClient

func NewClient(options *UploadClientOptions) *UploadClient

NewClient creates a new upload client

func NewClientWithDefaults

func NewClientWithDefaults(endpoint, accessKey string) *UploadClient

NewClientWithDefaults creates a new upload client with default options

func (*UploadClient) CreatePresignedUrl added in v1.0.5

func (c *UploadClient) CreatePresignedUrl(bucketName, objectName string, action PresignedAction, options *CreatePresignedUrlOptions) (string, error)

func (*UploadClient) DeleteObject

func (c *UploadClient) DeleteObject(bucketName, objectName string) error

DeleteObject calls DeleteFile handler on server

func (*UploadClient) DownloadObject

func (c *UploadClient) DownloadObject(bucketName, objectName string, w io.Writer) error

DownloadObject streams object to provided writer (e.g. file)

func (*UploadClient) GetObject

func (c *UploadClient) GetObject(bucketName, objectName string) ([]byte, error)

GetObject calls server download handler and returns bytes

func (*UploadClient) ListObjects added in v1.0.1

func (c *UploadClient) ListObjects(bucketName, path string) ([]ObjectInfo, error)

ListObjects lists objects in a bucket

func (*UploadClient) PutObject deprecated

func (c *UploadClient) PutObject(bucketName, objectName string, data []byte, opts *UploadOptions) (*UploadResult, error)

PutObject uploads a file in chunks with checksum verification using concurrent workers

Deprecated: use PutObjectV2 instead

func (*UploadClient) PutObjectForm deprecated added in v1.0.3

func (c *UploadClient) PutObjectForm(bucketName, objectName string, data []byte) (string, error)

PutObjectForm uploads a file in one form request

Deprecated: Use PutObjectFormV2 instead

func (*UploadClient) PutObjectFormV2 added in v1.0.4

func (c *UploadClient) PutObjectFormV2(ctx context.Context, bucketName, objectName string, data []byte) (string, error)

PutObjectFormV2 uploads a file in one form request

func (*UploadClient) PutObjectV2 added in v1.0.4

func (c *UploadClient) PutObjectV2(ctx context.Context, bucketName, objectName string, data []byte, opts *UploadOptions) (*UploadResult, error)

PutObjectV2 uploads a file in chunks with checksum verification using concurrent workers

func (*UploadClient) StatObject added in v1.0.1

func (c *UploadClient) StatObject(bucketName, objectName string) (*ObjectInfo, error)

StatObject returns information about an object in a bucket

type UploadClientOptions

type UploadClientOptions struct {
	AccessKey      string
	ChunkSize      int
	Endpoint       string
	HTTPClient     *http.Client
	Logger         *log.Logger
	MaxConcurrency int
}

type UploadOptions

type UploadOptions struct {
	OnProgress        func(uploaded, total int64)
	ChecksumAlgorithm string
}

type UploadResult

type UploadResult struct {
	Checksum string
	Size     int64
	Path     string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL