stream

package
v4.1.9 Latest Latest
Warning

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

Go to latest
Published: Jan 1, 2026 License: AGPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CacheFullAndHash added in v4.1.1

func CacheFullAndHash(stream model.FileStreamer, up *model.UpdateProgress, hashType *utils.HashType, hashParams ...any) (model.File, string, error)
func GetRangeReaderFromLink(size int64, link *model.Link) (model.RangeReaderIF, error)

func GetRangeReaderFromMFile added in v4.0.9

func GetRangeReaderFromMFile(size int64, file model.File) *model.FileRangeReader

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) CacheFullAndWriter added in v4.1.1

func (f *FileStream) CacheFullAndWriter(up *model.UpdateProgress, writer io.Writer) (model.File, error)

CacheFullAndWriter save all data into tmpFile or memory. 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)

从流读取指定范围的一块数据,并且不消耗流。 当读取的边界超过内部设置大小后会缓存整个流。 流未缓存时线程不完全

func (*FileStream) SetExist

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

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) (n int, err 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 (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.Reader
	GetSize() int64
}

type SeekableStream

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

func NewSeekableStream

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

NewSeekableStream create a SeekableStream from FileStream and Link if FileStream.Reader is not nil, use it directly else create RangeReader from Link

func (*SeekableStream) CacheFullAndWriter added in v4.1.1

func (ss *SeekableStream) CacheFullAndWriter(up *model.UpdateProgress, writer io.Writer) (model.File, error)

func (*SeekableStream) RangeRead

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

如果使用缓存或者rangeReader读取指定范围的数据,是线程安全的 其他特性继承自FileStream.RangeRead

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

type StreamSectionReaderIF added in v4.1.4

type StreamSectionReaderIF interface {
	// 线程不安全
	GetSectionReader(off, length int64) (io.ReadSeeker, error)
	FreeSectionReader(sr io.ReadSeeker)
	// 线程不安全
	DiscardSection(off int64, length int64) error
}

func NewStreamSectionReader added in v4.1.1

func NewStreamSectionReader(file model.FileStreamer, maxBufferSize int, up *model.UpdateProgress) (StreamSectionReaderIF, error)

Jump to

Keyboard shortcuts

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