filesystem

package
v0.0.0-...-d0af5c4 Latest Latest
Warning

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

Go to latest
Published: Feb 19, 2025 License: MIT Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNotFound = errors.New("blob not found")
View Source
var ThumbSizeRegex = regexp.MustCompile(`^(\d+)x(\d+)(t|b|f)?$`)

Functions

This section is empty.

Types

type BytesReader

type BytesReader struct {
	Bytes []byte
}

BytesReader defines a FileReader from bytes content.

func (*BytesReader) Open

func (r *BytesReader) Open() (io.ReadSeekCloser, error)

Open implements the filesystem.FileReader interface.

type File

type File struct {
	Reader       FileReader `form:"-" json:"-" xml:"-"`
	Name         string     `form:"name" json:"name" xml:"name"`
	OriginalName string     `form:"originalName" json:"originalName" xml:"originalName"`
	Size         int64      `form:"size" json:"size" xml:"size"`
}

File defines a single file io.ReadSeekCloser resource.

The file could be from a local path, multipart/form-data header, etc.

func NewFileFromBytes

func NewFileFromBytes(b []byte, name string) (*File, error)

NewFileFromBytes creates a new File instance from the provided byte slice.

func NewFileFromMultipart

func NewFileFromMultipart(mh *multipart.FileHeader) (*File, error)

NewFileFromMultipart creates a new File from the provided multipart header.

func NewFileFromPath

func NewFileFromPath(path string) (*File, error)

NewFileFromPath creates a new File instance from the provided local file path.

func NewFileFromURL

func NewFileFromURL(ctx context.Context, url string) (*File, error)

NewFileFromURL creates a new File from the provided url by downloading the resource and load it as BytesReader.

Example

ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

file, err := filesystem.NewFileFromURL(ctx, "https://example.com/image.png")

func (*File) AsMap

func (f *File) AsMap() map[string]any

AsMap implements [core.mapExtractor] and returns a value suitable to be used in an API rule expression.

type FileReader

type FileReader interface {
	Open() (io.ReadSeekCloser, error)
}

FileReader defines an interface for a file resource reader.

type MultipartReader

type MultipartReader struct {
	Header *multipart.FileHeader
}

MultipartReader defines a FileReader from multipart.FileHeader.

func (*MultipartReader) Open

func (r *MultipartReader) Open() (io.ReadSeekCloser, error)

Open implements the filesystem.FileReader interface.

type PathReader

type PathReader struct {
	Path string
}

PathReader defines a FileReader from a local file path.

func (*PathReader) Open

func (r *PathReader) Open() (io.ReadSeekCloser, error)

Open implements the filesystem.FileReader interface.

type System

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

func NewLocal

func NewLocal(dirPath string) (*System, error)

NewLocal initializes a new local filesystem instance.

NB! Make sure to call `Close()` after you are done working with it.

func (*System) Attributes

func (s *System) Attributes(fileKey string) (*blob.Attributes, error)

Attributes returns the attributes for the file with fileKey path.

If the file doesn't exist it returns ErrNotFound.

func (*System) Close

func (s *System) Close() error

Close releases any resources used for the related filesystem.

func (*System) Copy

func (s *System) Copy(srcKey, dstKey string) error

Copy copies the file stored at srcKey to dstKey.

If srcKey file doesn't exist, it returns ErrNotFound.

If dstKey file already exists, it is overwritten.

func (*System) CreateThumb

func (s *System) CreateThumb(originalKey string, thumbKey, thumbSize string) error

CreateThumb creates a new thumb image for the file at originalKey location. The new thumb file is stored at thumbKey location.

thumbSize is in the format: - 0xH (eg. 0x100) - resize to H height preserving the aspect ratio - Wx0 (eg. 300x0) - resize to W width preserving the aspect ratio - WxH (eg. 300x100) - resize and crop to WxH viewbox (from center) - WxHt (eg. 300x100t) - resize and crop to WxH viewbox (from top) - WxHb (eg. 300x100b) - resize and crop to WxH viewbox (from bottom) - WxHf (eg. 300x100f) - fit inside a WxH viewbox (without cropping)

func (*System) Delete

func (s *System) Delete(fileKey string) error

Delete deletes stored file at fileKey location.

If the file doesn't exist returns ErrNotFound.

func (*System) DeletePrefix

func (s *System) DeletePrefix(prefix string) []error

DeletePrefix deletes everything starting with the specified prefix.

The prefix could be subpath (ex. "/a/b/") or filename prefix (ex. "/a/b/file_").

func (*System) Exists

func (s *System) Exists(fileKey string) (bool, error)

Exists checks if file with fileKey path exists or not.

If the file doesn't exist returns false and ErrNotFound.

func (*System) GetFile

func (s *System) GetFile(fileKey string) (*blob.Reader, error)

GetFile returns a file content reader for the given fileKey.

NB! Make sure to call Close() on the file after you are done working with it.

If the file doesn't exist returns ErrNotFound.

func (*System) IsEmptyDir

func (s *System) IsEmptyDir(dir string) bool

Checks if the provided dir prefix doesn't have any files.

A trailing slash will be appended to a non-empty dir string argument to ensure that the checked prefix is a "directory".

Returns "false" in case the has at least one file, otherwise - "true".

func (*System) List

func (s *System) List(prefix string) ([]*blob.ListObject, error)

List returns a flat list with info for all files under the specified prefix.

func (*System) Serve

func (s *System) Serve(res http.ResponseWriter, req *http.Request, fileKey string, name string) error

Serve serves the file at fileKey location to an HTTP response.

If the `download` query parameter is used the file will be always served for download no matter of its type (aka. with "Content-Disposition: attachment").

Internally this method uses http.ServeContent so Range requests, If-Match, If-Unmodified-Since, etc. headers are handled transparently.

func (*System) SetContext

func (s *System) SetContext(ctx context.Context)

SetContext assigns the specified context to the current filesystem.

func (*System) Upload

func (s *System) Upload(content []byte, fileKey string) error

Upload writes content into the fileKey location.

func (*System) UploadFile

func (s *System) UploadFile(file *File, fileKey string) error

UploadFile uploads the provided File to the fileKey location.

func (*System) UploadMultipart

func (s *System) UploadMultipart(fh *multipart.FileHeader, fileKey string) error

UploadMultipart uploads the provided multipart file to the fileKey location.

Jump to

Keyboard shortcuts

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