stream

package
v4.0.9 Latest Latest
Warning

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

Go to latest
Published: Jul 24, 2025 License: AGPL-3.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const InMemoryBufMaxSize = 10 // Megabytes
View Source
const InMemoryBufMaxSizeBytes = InMemoryBufMaxSize * 1024 * 1024

Variables

This section is empty.

Functions

func CacheFullInTempFileAndHash

func CacheFullInTempFileAndHash(stream model.FileStreamer, up model.UpdateProgress, hashType *utils.HashType, hashParams ...any) (model.File, string, error)

func CacheFullInTempFileAndWriter

func CacheFullInTempFileAndWriter(stream model.FileStreamer, up model.UpdateProgress, w io.Writer) (model.File, error)
func GetRangeReaderFromLink(size int64, link *model.Link) (model.RangeReaderIF, error)

func NewMultiReaderAt

func NewMultiReaderAt(ss []*SeekableStream) (readerutil.SizeReaderAt, error)

func NewReadAtSeeker

func NewReadAtSeeker(ss *SeekableStream, offset int64, forceRange ...bool) (model.File, error)

Types

type FileStream

type FileStream struct {
	Ctx context.Context
	model.Obj
	io.Reader
	Mimetype          string
	WebPutAsTask      bool
	ForceStreamUpload bool
	Exist             model.Obj //the file existed in the destination, we can reuse some info since we wil overwrite it
	utils.Closers
	// contains filtered or unexported fields
}

func (*FileStream) CacheFullInTempFile

func (f *FileStream) CacheFullInTempFile() (model.File, error)

CacheFullInTempFile save all data into tmpFile. Not recommended since it wears disk, and can't start upload until the file is written. It's not thread-safe!

func (*FileStream) Close

func (f *FileStream) Close() error

func (*FileStream) GetExist

func (f *FileStream) GetExist() model.Obj

func (*FileStream) GetFile

func (f *FileStream) GetFile() model.File

func (*FileStream) GetMimetype

func (f *FileStream) GetMimetype() string

func (*FileStream) GetSize

func (f *FileStream) GetSize() int64

func (*FileStream) IsForceStreamUpload

func (f *FileStream) IsForceStreamUpload() bool

func (*FileStream) NeedStore

func (f *FileStream) NeedStore() bool

func (*FileStream) RangeRead

func (f *FileStream) RangeRead(httpRange http_range.Range) (io.Reader, error)

RangeRead have to cache all data first since only Reader is provided. also support a peeking RangeRead at very start, but won't buffer more than 10MB data in memory

func (*FileStream) SetExist

func (f *FileStream) SetExist(obj model.Obj)

func (*FileStream) SetTmpFile

func (f *FileStream) SetTmpFile(r *os.File)

type Limiter

type Limiter interface {
	Limit() rate.Limit
	Burst() int
	TokensAt(time.Time) float64
	Tokens() float64
	Allow() bool
	AllowN(time.Time, int) bool
	Reserve() *rate.Reservation
	ReserveN(time.Time, int) *rate.Reservation
	Wait(context.Context) error
	WaitN(context.Context, int) error
	SetLimit(rate.Limit)
	SetLimitAt(time.Time, rate.Limit)
	SetBurst(int)
	SetBurstAt(time.Time, int)
}
var (
	ClientDownloadLimit Limiter
	ClientUploadLimit   Limiter
	ServerDownloadLimit Limiter
	ServerUploadLimit   Limiter
)

type RangeReadReadAtSeeker

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

func (*RangeReadReadAtSeeker) InitHeadCache

func (r *RangeReadReadAtSeeker) InitHeadCache()

func (*RangeReadReadAtSeeker) Read

func (r *RangeReadReadAtSeeker) Read(p []byte) (n int, err error)

func (*RangeReadReadAtSeeker) ReadAt

func (r *RangeReadReadAtSeeker) ReadAt(p []byte, off int64) (int, error)

func (*RangeReadReadAtSeeker) Seek

func (r *RangeReadReadAtSeeker) Seek(offset int64, whence int) (int64, error)

type RangeReaderFunc added in v4.0.9

type RangeReaderFunc func(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error)

func GetRangeReaderFromMFile added in v4.0.9

func GetRangeReaderFromMFile(size int64, file model.File) RangeReaderFunc

func (RangeReaderFunc) RangeRead added in v4.0.9

func (f RangeReaderFunc) RangeRead(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error)

type RateLimitFile

type RateLimitFile struct {
	model.File
	Limiter Limiter
	Ctx     context.Context
}

func (*RateLimitFile) Close added in v4.0.8

func (r *RateLimitFile) Close() error

func (*RateLimitFile) Read

func (r *RateLimitFile) Read(p []byte) (n int, err error)

func (*RateLimitFile) ReadAt

func (r *RateLimitFile) ReadAt(p []byte, off int64) (n int, err error)

type RateLimitRangeReaderFunc added in v4.0.9

type RateLimitRangeReaderFunc RangeReaderFunc

func (RateLimitRangeReaderFunc) RangeRead added in v4.0.9

func (f RateLimitRangeReaderFunc) RangeRead(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error)

type RateLimitReader

type RateLimitReader struct {
	io.Reader
	Limiter Limiter
	Ctx     context.Context
}

func (*RateLimitReader) Close

func (r *RateLimitReader) Close() error

func (*RateLimitReader) Read

func (r *RateLimitReader) Read(p []byte) (n int, err error)

type RateLimitWriter

type RateLimitWriter struct {
	io.Writer
	Limiter Limiter
	Ctx     context.Context
}

func (*RateLimitWriter) Close

func (w *RateLimitWriter) Close() error

func (*RateLimitWriter) Write

func (w *RateLimitWriter) Write(p []byte) (n int, err error)

type ReaderUpdatingProgress

type ReaderUpdatingProgress struct {
	Reader ReaderWithSize
	model.UpdateProgress
	// contains filtered or unexported fields
}

func (*ReaderUpdatingProgress) Close

func (r *ReaderUpdatingProgress) Close() error

func (*ReaderUpdatingProgress) Read

func (r *ReaderUpdatingProgress) Read(p []byte) (n int, err error)

type ReaderWithCtx

type ReaderWithCtx struct {
	io.Reader
	Ctx context.Context
}

func (*ReaderWithCtx) Close

func (r *ReaderWithCtx) Close() error

func (*ReaderWithCtx) Read

func (r *ReaderWithCtx) Read(p []byte) (n int, err error)

type ReaderWithSize

type ReaderWithSize interface {
	io.ReadCloser
	GetSize() int64
}

type SeekableStream

type SeekableStream struct {
	*FileStream
	// contains filtered or unexported fields
}

for most internal stream, which is either RangeReadCloser or MFile Any functionality implemented based on SeekableStream should implement a Close method, whose only purpose is to close the SeekableStream object. If such functionality has additional resources that need to be closed, they should be added to the Closer property of the SeekableStream object and be closed together when the SeekableStream object is closed.

func NewSeekableStream

func NewSeekableStream(fs *FileStream, link *model.Link) (*SeekableStream, error)

func (*SeekableStream) CacheFullInTempFile

func (ss *SeekableStream) CacheFullInTempFile() (model.File, error)

func (*SeekableStream) GetSize added in v4.0.9

func (ss *SeekableStream) GetSize() int64

func (*SeekableStream) RangeRead

func (ss *SeekableStream) RangeRead(httpRange http_range.Range) (io.Reader, error)

RangeRead is not thread-safe, pls use it in single thread only.

func (*SeekableStream) Read

func (ss *SeekableStream) Read(p []byte) (n int, err error)

only provide Reader as full stream when it's demanded. in rapid-upload, we can skip this to save memory

type SimpleReaderWithSize

type SimpleReaderWithSize struct {
	io.Reader
	Size int64
}

func (*SimpleReaderWithSize) Close

func (r *SimpleReaderWithSize) Close() error

func (*SimpleReaderWithSize) GetSize

func (r *SimpleReaderWithSize) GetSize() int64

Jump to

Keyboard shortcuts

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