Documentation ¶
Index ¶
- Variables
- func AddFileIndexes(catalog *coal.Catalog)
- func DownloadTo(download Download, writer io.Writer) error
- func UploadFrom(upload Upload, reader io.Reader) (int64, error)
- func ValidateType(str string, whitelist ...string) error
- type Binding
- type ClaimKey
- type CleanupJob
- type Download
- type File
- type GridFS
- func (g *GridFS) Cleanup(_ context.Context) error
- func (g *GridFS) Delete(ctx context.Context, handle Handle) error
- func (g *GridFS) Download(ctx context.Context, handle Handle) (Download, error)
- func (g *GridFS) Initialize(ctx context.Context) error
- func (g *GridFS) Prepare(_ context.Context) (Handle, error)
- func (g *GridFS) Upload(ctx context.Context, handle Handle, _ string) (Upload, error)
- type Handle
- type Link
- type Links
- type Memory
- func (m *Memory) Cleanup(_ context.Context) error
- func (m *Memory) Delete(_ context.Context, handle Handle) error
- func (m *Memory) Download(_ context.Context, handle Handle) (Download, error)
- func (m *Memory) Prepare(_ context.Context) (Handle, error)
- func (m *Memory) Upload(_ context.Context, handle Handle, mediaType string) (Upload, error)
- type MemoryBlob
- type Register
- type Service
- type State
- type Storage
- func (s *Storage) Claim(ctx context.Context, model coal.Model, field string) error
- func (s *Storage) ClaimFile(ctx context.Context, claimKey, binding string, owner coal.ID) (*File, error)
- func (s *Storage) ClaimLink(ctx context.Context, link *Link, binding string, owner coal.ID) error
- func (s *Storage) Cleanup(ctx context.Context, retention time.Duration) error
- func (s *Storage) CleanupTask(lifetime, timeout, periodicity, retention time.Duration) *axe.Task
- func (s *Storage) Decorate(link *Link) error
- func (s *Storage) Decorator(fields ...string) *fire.Callback
- func (s *Storage) Download(ctx context.Context, viewKey string) (Download, *File, error)
- func (s *Storage) DownloadAction() *fire.Action
- func (s *Storage) DownloadFile(ctx context.Context, id coal.ID) (Download, *File, error)
- func (s *Storage) Modifier(fields ...string) *fire.Callback
- func (s *Storage) Release(ctx context.Context, model coal.Model, field string) error
- func (s *Storage) ReleaseFile(ctx context.Context, file coal.ID) error
- func (s *Storage) ReleaseLink(ctx context.Context, link *Link) error
- func (s *Storage) Upload(ctx context.Context, mediaType string, cb func(Upload) (int64, error)) (string, *File, error)
- func (s *Storage) UploadAction(limit int64) *fire.Action
- type Upload
- type ViewKey
Constants ¶
This section is empty.
Variables ¶
var ErrInvalidHandle = xo.BF("invalid handle")
ErrInvalidHandle is returned if the provided handle is invalid.
var ErrInvalidPosition = xo.BF("invalid position")
ErrInvalidPosition is returned if a seek resulted in an invalid position.
var ErrNotFound = xo.BF("not found")
ErrNotFound is returned if there is no blob for the provided handle.
var ErrUsedHandle = xo.BF("used handle")
ErrUsedHandle is returned if the provided handle has already been used.
Functions ¶
func AddFileIndexes ¶ added in v0.26.0
AddFileIndexes will add files indexes to the specified catalog.
func DownloadTo ¶ added in v0.28.1
DownloadTo will download a blob to the provided writer.
func UploadFrom ¶ added in v0.28.1
UploadFrom will upload a blob from the provided reader.
func ValidateType ¶ added in v0.29.0
ValidateType will validate a media type.
Types ¶
type Binding ¶ added in v0.29.0
type Binding struct { // The name e.g. "user-avatar". Name string // The owner model. Owner coal.Model // The link field on the model. Field string // The file size limit. Limit int64 // The allowed media types. Types []string // The filename used for downloads. Filename string }
Binding describes the binding if a file to a model.
type ClaimKey ¶ added in v0.26.0
type ClaimKey struct { heat.Base `json:"-" heat:"fire/blaze.claim,1h"` // The claimable file. File coal.ID `json:"file"` // The files size. Size int64 `json:"size"` // The files media type. Type string `json:"type"` }
ClaimKey is used to authorize file claims.
type CleanupJob ¶ added in v0.28.0
type CleanupJob struct { axe.Base `json:"-" axe:"fire/blaze.cleanup"` stick.NoValidation }
CleanupJob is the periodic job enqueued to cleanup a storage.
type Download ¶ added in v0.28.1
type Download interface { Seek(offset int64, whence int) (int64, error) Read(buf []byte) (int, error) Close() error }
Download handles the download of a blob.
type File ¶ added in v0.26.0
type File struct { coal.Base `json:"-" bson:",inline" coal:"files"` // The current state of the file e.g. "uploading". State State `json:"state"` // The last time the file was updated. Updated time.Time `json:"updated-at" bson:"updated_at"` // The media type of the file e.g. "image/png". Type string `json:"type"` // The size of the file. Size int64 `json:"size"` // The service specific blob handle. Handle Handle `json:"handle"` // The binding of the file. Binding string `json:"binding"` // The owner of the file. Owner *coal.ID `json:"owner"` }
File tracks uploaded files and their state.
type GridFS ¶ added in v0.26.0
type GridFS struct {
// contains filtered or unexported fields
}
GridFS stores blobs in a GridFS bucket.
func (*GridFS) Initialize ¶ added in v0.28.2
Initialize will initialize the GridFS bucket.
type Handle ¶ added in v0.26.0
type Handle map[string]interface{}
Handle is a reference to a blob stored in a service.
type Link ¶ added in v0.26.0
type Link struct { // The user definable reference of the link. Ref string `json:"ref"` // The media type of the linked file. Type string `json:"type" bson:"-"` // The size of the linked file. Size int64 `json:"size" bson:"-"` // The key for claiming a file. ClaimKey string `json:"claim-key" bson:"-"` // The key for viewing the linked file. ViewKey string `json:"view-key" bson:"-"` // The internal reference to the linked file. File *coal.ID `json:"-" bson:"file_id"` // The internal information about the linked file. FileType string `json:"-" bson:"type"` FileSize int64 `json:"-" bson:"size"` }
Link is used to link a file to a model.
type Links ¶ added in v0.29.1
type Links []Link
Links is a set of links.
func (*Links) UnmarshalBSONValue ¶ added in v0.29.1
UnmarshalBSONValue implements the bson.ValueUnmarshaler interface.
func (*Links) UnmarshalJSON ¶ added in v0.29.1
UnmarshalJSON implements the json.Unmarshaler interface.
type Memory ¶ added in v0.26.0
type Memory struct { // The stored blobs. Blobs map[string]*MemoryBlob // The next id. Next int }
Memory is a service for testing purposes that stores blobs in memory.
func NewMemory ¶ added in v0.26.0
func NewMemory() *Memory
NewMemory will create a new memory service.
type MemoryBlob ¶ added in v0.29.0
MemoryBlob is a blob stored by the memory service.
type Register ¶ added in v0.29.0
type Register struct {
// contains filtered or unexported fields
}
Register manages multiple bindings.
func NewRegister ¶ added in v0.29.0
func NewRegister() *Register
NewRegister creates and returns a new register.
func (*Register) Add ¶ added in v0.29.0
Add will add the specified binding to the register. The name of the binding must be unique among all registered bindings.
type Service ¶ added in v0.26.0
type Service interface { // Prepare should return a new handle for uploading a blob. Prepare(ctx context.Context) (Handle, error) // Upload should initiate the upload of a blob. Upload(ctx context.Context, handle Handle, mediaType string) (Upload, error) // Download should initiate the download of a blob. Download(ctx context.Context, handle Handle) (Download, error) // Delete should delete the blob. Delete(ctx context.Context, handle Handle) error // Cleanup is called periodically and allows the service to cleanup its // storage until the context is cancelled. Cleanup(ctx context.Context) error }
Service is responsible for managing blobs.
type State ¶ added in v0.26.0
type State string
State describes the current state of a file. Usually, the state of a file always moves forward by one step but it may also jump directly to "deleting".
type Storage ¶ added in v0.26.0
type Storage struct {
// contains filtered or unexported fields
}
Storage provides file storage services.
func NewStorage ¶ added in v0.26.0
func NewStorage(store *coal.Store, notary *heat.Notary, service Service, register *Register) *Storage
NewStorage creates a new storage.
func (*Storage) Claim ¶ added in v0.28.1
Claim will claim the link at the field on the provided model. The claimed link must be persisted in the same transaction as the claim to ensure consistency.
func (*Storage) ClaimFile ¶ added in v0.29.0
func (s *Storage) ClaimFile(ctx context.Context, claimKey, binding string, owner coal.ID) (*File, error)
ClaimFile will claim the file referenced by the provided claim key using the specified binding and owner.
func (*Storage) ClaimLink ¶ added in v0.29.0
ClaimLink will claim the provided link under the specified binding. The claimed link must be persisted in the same transaction as the claim to ensure consistency.
func (*Storage) Cleanup ¶ added in v0.26.0
Cleanup will remove obsolete files and remove their blobs. Files in the states "uploading" or "uploaded" are removed after the specified retention which defaults to one hour if zero. Files in the states "released" and "deleting" are removed immediately. It will also allow the service to cleanup.
func (*Storage) CleanupTask ¶ added in v0.26.0
CleanupTask will return a periodic task that can be run to periodically cleanup obsolete files.
func (*Storage) Decorate ¶ added in v0.28.1
Decorate will populate the view key of the provided link if a file is available.
func (*Storage) Decorator ¶ added in v0.26.0
Decorator will generate view keys for all or just the specified link fields on the returned model or models.
func (*Storage) Download ¶ added in v0.28.1
Download will initiate a download for the file referenced by the provided view key.
func (*Storage) DownloadAction ¶ added in v0.26.0
DownloadAction returns an action that allows downloading files using view keys. This action is usually publicly accessible.
func (*Storage) DownloadFile ¶ added in v0.29.1
DownloadFile will initiate a download for the specified file.
func (*Storage) Modifier ¶ added in v0.29.0
Modifier will handle modifications on all or just the specified link fields on the model.
func (*Storage) Release ¶ added in v0.28.1
Release will release the link at the field on the provided model. The released link must be persisted in the same transaction as the release to ensure consistency.
func (*Storage) ReleaseFile ¶ added in v0.29.0
ReleaseFile will release the file with the provided id.
func (*Storage) ReleaseLink ¶ added in v0.29.0
ReleaseLink will release the provided link. The released link must be persisted in the same transaction as the release to ensure consistency.
func (*Storage) Upload ¶ added in v0.28.1
func (s *Storage) Upload(ctx context.Context, mediaType string, cb func(Upload) (int64, error)) (string, *File, error)
Upload will initiate and perform an upload using the provided callback and return a claim key and the uploaded file. Upload must be called outside of a transaction to ensure the uploaded file is tracked in case of errors.
type Upload ¶ added in v0.28.1
type Upload interface { // Resume() (int64, error) Write(data []byte) (int, error) // Suspend() (int64, error) Abort() error Close() error }
Upload handles the upload of a blob.