Documentation
¶
Index ¶
- func CacheFullAndHash(stream model.FileStreamer, up *model.UpdateProgress, hashType *utils.HashType, ...) (model.File, string, error)
- func GetRangeReaderFromLink(size int64, link *model.Link) (model.RangeReaderIF, error)
- func GetRangeReaderFromMFile(size int64, file model.File) model.RangeReaderIF
- func NewMultiReaderAt(ss []*SeekableStream) (readerutil.SizeReaderAt, error)
- func NewReadAtSeeker(ss *SeekableStream, offset int64, forceRange ...bool) (model.File, error)
- type FileStream
- func (f *FileStream) CacheFullAndWriter(up *model.UpdateProgress, writer io.Writer) (model.File, error)
- func (f *FileStream) Close() error
- func (f *FileStream) GetExist() model.Obj
- func (f *FileStream) GetFile() model.File
- func (f *FileStream) GetMimetype() string
- func (f *FileStream) GetSize() int64
- func (f *FileStream) IsForceStreamUpload() bool
- func (f *FileStream) NeedStore() bool
- func (f *FileStream) RangeRead(httpRange http_range.Range) (io.Reader, error)
- func (f *FileStream) SetExist(obj model.Obj)
- func (f *FileStream) SetTmpFile(file model.File)
- type Limiter
- type RangeReadReadAtSeeker
- type RangeReaderFunc
- type RateLimitFile
- type RateLimitRangeReaderFunc
- type RateLimitReader
- type RateLimitWriter
- type ReaderUpdatingProgress
- type ReaderWithCtx
- type ReaderWithSize
- type SectionReader
- type SeekableStream
- type SimpleReaderWithSize
- type StreamSectionReader
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CacheFullAndHash ¶ added in v4.1.1
func GetRangeReaderFromLink ¶ added in v4.0.9
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 ¶
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)
}
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)
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 ¶
func (*RateLimitFile) Close ¶ added in v4.0.8
func (r *RateLimitFile) Close() 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 ¶
func (*RateLimitReader) Close ¶
func (r *RateLimitReader) Close() error
type RateLimitWriter ¶
func (*RateLimitWriter) Close ¶
func (w *RateLimitWriter) Close() error
type ReaderUpdatingProgress ¶
type ReaderUpdatingProgress struct {
Reader ReaderWithSize
model.UpdateProgress
// contains filtered or unexported fields
}
func (*ReaderUpdatingProgress) Close ¶
func (r *ReaderUpdatingProgress) Close() error
type ReaderWithCtx ¶
func (*ReaderWithCtx) Close ¶
func (r *ReaderWithCtx) Close() error
type ReaderWithSize ¶
type SectionReader ¶ added in v4.1.1
type SectionReader struct {
io.ReadSeeker
// contains filtered or unexported fields
}
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.
type SimpleReaderWithSize ¶
func (*SimpleReaderWithSize) Close ¶
func (r *SimpleReaderWithSize) Close() error
func (*SimpleReaderWithSize) GetSize ¶
func (r *SimpleReaderWithSize) GetSize() int64
type StreamSectionReader ¶ added in v4.1.1
type StreamSectionReader struct {
// contains filtered or unexported fields
}
func NewStreamSectionReader ¶ added in v4.1.1
func NewStreamSectionReader(file model.FileStreamer, maxBufferSize int, up *model.UpdateProgress) (*StreamSectionReader, error)
func (*StreamSectionReader) FreeSectionReader ¶ added in v4.1.1
func (ss *StreamSectionReader) FreeSectionReader(sr *SectionReader)
func (*StreamSectionReader) GetSectionReader ¶ added in v4.1.1
func (ss *StreamSectionReader) GetSectionReader(off, length int64) (*SectionReader, error)
线程不安全