stream

package
v4.1.5 Latest Latest
Warning

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

Go to latest
Published: Oct 19, 2025 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.RangeReaderIF

RangeReaderIF.RangeRead返回的io.ReadCloser保留file的签名。

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)

RangeRead have to cache all data first since only Reader is provided. It's not thread-safe!

func (*FileStream) SetExist

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

func (*FileStream) SetTmpFile

func (f *FileStream) SetTmpFile(file model.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) (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
}

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) 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)

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

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