stream

package
v3.49.0 Latest Latest
Warning

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

Go to latest
Published: Aug 6, 2025 License: AGPL-3.0 Imports: 18 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 added in v3.45.0

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

func CacheFullInTempFileAndUpdateProgress added in v3.45.0

func CacheFullInTempFileAndUpdateProgress(stream model.FileStreamer, up model.UpdateProgress) (model.File, error)

func CacheFullInTempFileAndWriter added in v3.45.0

func CacheFullInTempFileAndWriter(stream model.FileStreamer, w io.Writer) (model.File, error)
func GetRangeReadCloserFromLink(size int64, link *model.Link) (model.RangeReadCloserIF, error)

func NewMultiReaderAt added in v3.44.0

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

func RequestRangedHttp

func RequestRangedHttp(ctx context.Context, link *model.Link, offset, length int64) (*http.Response, error)

Types

type FileReadAtSeeker added in v3.42.0

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

func (*FileReadAtSeeker) Close added in v3.42.0

func (f *FileReadAtSeeker) Close() error

func (*FileReadAtSeeker) GetRawStream added in v3.42.0

func (f *FileReadAtSeeker) GetRawStream() *SeekableStream

func (*FileReadAtSeeker) Read added in v3.42.0

func (f *FileReadAtSeeker) Read(p []byte) (n int, err error)

func (*FileReadAtSeeker) ReadAt added in v3.42.0

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

func (*FileReadAtSeeker) Seek added in v3.42.0

func (f *FileReadAtSeeker) Seek(offset int64, whence int) (int64, error)

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 added in v3.45.0

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

func (*FileStream) GetMimetype

func (f *FileStream) GetMimetype() string

func (*FileStream) GetSize added in v3.28.0

func (f *FileStream) GetSize() int64

func (*FileStream) IsForceStreamUpload added in v3.34.0

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 added in v3.43.0

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 added in v3.42.0

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

func (*RangeReadReadAtSeeker) Close added in v3.42.0

func (r *RangeReadReadAtSeeker) Close() error

func (*RangeReadReadAtSeeker) GetRawStream added in v3.42.0

func (r *RangeReadReadAtSeeker) GetRawStream() *SeekableStream

func (*RangeReadReadAtSeeker) InitHeadCache added in v3.42.0

func (r *RangeReadReadAtSeeker) InitHeadCache()

func (*RangeReadReadAtSeeker) Read added in v3.42.0

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

func (*RangeReadReadAtSeeker) ReadAt added in v3.42.0

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

func (*RangeReadReadAtSeeker) Seek added in v3.42.0

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

type RateLimitFile added in v3.43.0

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

func (*RateLimitFile) Read added in v3.43.0

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

func (*RateLimitFile) ReadAt added in v3.43.0

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

type RateLimitRangeReadCloser added in v3.43.0

type RateLimitRangeReadCloser struct {
	model.RangeReadCloserIF
	Limiter Limiter
}

func (*RateLimitRangeReadCloser) RangeRead added in v3.43.0

func (rrc *RateLimitRangeReadCloser) RangeRead(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error)

type RateLimitReader added in v3.43.0

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

func (*RateLimitReader) Close added in v3.43.0

func (r *RateLimitReader) Close() error

func (*RateLimitReader) Read added in v3.43.0

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

type RateLimitWriter added in v3.43.0

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

func (*RateLimitWriter) Close added in v3.43.0

func (w *RateLimitWriter) Close() error

func (*RateLimitWriter) Write added in v3.43.0

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

type ReaderUpdatingProgress added in v3.42.0

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

func (*ReaderUpdatingProgress) Close added in v3.43.0

func (r *ReaderUpdatingProgress) Close() error

func (*ReaderUpdatingProgress) Read added in v3.42.0

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

type ReaderWithCtx added in v3.43.0

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

func (*ReaderWithCtx) Close added in v3.43.0

func (r *ReaderWithCtx) Close() error

func (*ReaderWithCtx) Read added in v3.43.0

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

type ReaderWithSize added in v3.42.0

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

type SStreamReadAtSeeker added in v3.42.0

type SStreamReadAtSeeker interface {
	model.File
	GetRawStream() *SeekableStream
}

func NewReadAtSeeker added in v3.42.0

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

type SeekableStream

type SeekableStream struct {
	FileStream
	Link *model.Link
	// 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) GetFile added in v3.45.0

func (ss *SeekableStream) GetFile() model.File

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 added in v3.42.0

type SimpleReaderWithSize struct {
	io.Reader
	Size int64
}

func (*SimpleReaderWithSize) Close added in v3.43.0

func (r *SimpleReaderWithSize) Close() error

func (*SimpleReaderWithSize) GetSize added in v3.42.0

func (r *SimpleReaderWithSize) GetSize() int64

Jump to

Keyboard shortcuts

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