filestorage

package
v0.2.78 Latest Latest
Warning

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

Go to latest
Published: Sep 12, 2026 License: MIT Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MaxFileSize = 4 * 1024 * 1024
	AvatarPath  = "avatars"
)
View Source
const DatabaseDriver = "database"
View Source
const (
	S3Driver = "s3"
)

Variables

View Source
var ErrDirectUploadInvalidObject = errors.New("uploaded object failed validation")
View Source
var ErrDirectUploadOwnerMismatch = errors.New("pending upload does not belong to user")
View Source
var ErrDirectUploadUnsupported = errors.New("file storage does not support direct uploads")

Functions

func AbortDirectUpload

func AbortDirectUpload(ctx context.Context, request CompleteDirectUploadRequest) error

func CleanupPending

func CleanupPending(ctx context.Context, before time.Time, limit int) (int, error)

func Configure

func Configure(writeStore Store, readStores ...Store) error

Configure changes the process-wide storage backend used by application services.

func ConfigureFromPreferences

func ConfigureFromPreferences() error

func Delete

func Delete(ctx context.Context, name string) error

func NewUploadName

func NewUploadName(filename string, customPath string) string

func SupportsDirectUpload

func SupportsDirectUpload() bool

Types

type AvatarUpload

type AvatarUpload struct {
	Filename string
	Data     []byte
}

type CompleteDirectUploadRequest

type CompleteDirectUploadRequest struct {
	Name      string
	UserId    uint64
	Validator func(io.Reader, string) error
}

type DirectUpload

type DirectUpload struct {
	URL       string            `json:"url"`
	Method    string            `json:"method"`
	Fields    map[string]string `json:"fields"`
	ExpiresAt time.Time         `json:"expiresAt"`
}

type DirectUploadRequest

type DirectUploadRequest struct {
	Name        string
	ContentType string
	Size        int64
	UserId      uint64
	ExpiresIn   time.Duration
}

type DirectUploadSession

type DirectUploadSession struct {
	Metadata Metadata
	Upload   DirectUpload
}

func BeginDirectUpload

func BeginDirectUpload(ctx context.Context, request DirectUploadRequest) (*DirectUploadSession, error)

type DirectUploadStore

type DirectUploadStore interface {
	PresignUpload(context.Context, DirectUploadRequest) (*DirectUpload, error)
	VerifyUpload(context.Context, DirectUploadRequest) error
}

DirectUploadStore is an optional capability implemented by remote stores.

type Metadata

type Metadata struct {
	Id            uint64
	Name          string
	ContentType   string
	Size          int64
	UserId        uint64
	StorageDriver string
	StorageStatus string
	CreatedAt     time.Time
	UpdatedAt     time.Time
}

func CompleteDirectUpload

func CompleteDirectUpload(ctx context.Context, request CompleteDirectUploadRequest) (*Metadata, error)

func Put

func Put(ctx context.Context, request PutRequest) (*Metadata, error)

func SaveAvatar

func SaveAvatar(ctx context.Context, userId uint64, data []byte, filename string) (*Metadata, error)

func SaveAvatarSet

func SaveAvatarSet(ctx context.Context, userId uint64, uploads []AvatarUpload) ([]*Metadata, error)

func SaveFileFromUpload

func SaveFileFromUpload(ctx context.Context, userId uint64, data []byte, filename string, customPath string) (*Metadata, error)

func Stat

func Stat(ctx context.Context, name string) (*Metadata, error)

func (Metadata) GetAccessPath

func (metadata Metadata) GetAccessPath() string

type Object

type Object struct {
	Metadata Metadata
	Body     io.ReadCloser
}

func Open

func Open(ctx context.Context, name string) (*Object, error)

type PutRequest

type PutRequest struct {
	Name        string
	ContentType string
	Size        int64
	UserId      uint64
	Body        io.Reader
}

type S3Config

type S3Config struct {
	Endpoint     string
	PublicURL    string
	Bucket       string
	AccessKey    string
	SecretKey    string
	SessionToken string
	Region       string
	Secure       bool
	PathStyle    bool
}

type S3Store

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

func NewS3Store

func NewS3Store(config S3Config) (*S3Store, error)

func (*S3Store) Delete

func (store *S3Store) Delete(ctx context.Context, name string) error

func (*S3Store) Driver

func (*S3Store) Driver() string

func (*S3Store) Open

func (store *S3Store) Open(ctx context.Context, name string) (*StoredObject, error)

func (*S3Store) PresignUpload

func (store *S3Store) PresignUpload(ctx context.Context, request DirectUploadRequest) (*DirectUpload, error)

func (*S3Store) Put

func (store *S3Store) Put(ctx context.Context, request WriteRequest) error

func (*S3Store) VerifyUpload

func (store *S3Store) VerifyUpload(ctx context.Context, request DirectUploadRequest) error

type Service

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

func New

func New(writeStore Store, readStores ...Store) (*Service, error)

func (*Service) AbortDirectUpload

func (service *Service) AbortDirectUpload(ctx context.Context, request CompleteDirectUploadRequest) error

func (*Service) BeginDirectUpload

func (service *Service) BeginDirectUpload(ctx context.Context, request DirectUploadRequest) (*DirectUploadSession, error)

func (*Service) CleanupPending

func (service *Service) CleanupPending(ctx context.Context, before time.Time, limit int) (int, error)

func (*Service) CompleteDirectUpload

func (service *Service) CompleteDirectUpload(ctx context.Context, request CompleteDirectUploadRequest) (*Metadata, error)

func (*Service) Delete

func (service *Service) Delete(ctx context.Context, name string) error

func (*Service) Open

func (service *Service) Open(ctx context.Context, name string) (*Object, error)

func (*Service) Put

func (service *Service) Put(ctx context.Context, request PutRequest) (*Metadata, error)

func (*Service) Stat

func (service *Service) Stat(ctx context.Context, name string) (*Metadata, error)

func (*Service) SupportsDirectUpload

func (service *Service) SupportsDirectUpload() bool

type Store

type Store interface {
	Driver() string
	Put(context.Context, WriteRequest) error
	Open(context.Context, string) (*StoredObject, error)
	Delete(context.Context, string) error
}

Store only owns file content. Forum metadata is maintained by Service.

func NewDatabaseStore

func NewDatabaseStore() Store

type StoredObject

type StoredObject struct {
	Size int64
	Body io.ReadCloser
}

type WriteRequest

type WriteRequest struct {
	Name        string
	ContentType string
	Size        int64
	Body        io.Reader
}

Jump to

Keyboard shortcuts

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