Documentation
¶
Index ¶
- Constants
- func CacheFullInTempFileAndHash(stream model.FileStreamer, up model.UpdateProgress, hashType *utils.HashType, ...) (model.File, string, error)
- 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(ss []*SeekableStream) (readerutil.SizeReaderAt, error)
- func NewReadAtSeeker(ss *SeekableStream, offset int64, forceRange ...bool) (model.File, error)
- type FileStream
- func (f *FileStream) CacheFullInTempFile() (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(r *os.File)
- type Limiter
- type RangeReadReadAtSeeker
- type RangeReaderFunc
- type RateLimitFile
- type RateLimitRangeReaderFunc
- type RateLimitReader
- type RateLimitWriter
- type ReaderUpdatingProgress
- type ReaderWithCtx
- type ReaderWithSize
- type SeekableStream
- type SimpleReaderWithSize
Constants ¶
const InMemoryBufMaxSize = 10 // Megabytes
const InMemoryBufMaxSizeBytes = InMemoryBufMaxSize * 1024 * 1024
Variables ¶
This section is empty.
Functions ¶
func CacheFullInTempFileAndWriter ¶
func CacheFullInTempFileAndWriter(stream model.FileStreamer, up model.UpdateProgress, w io.Writer) (model.File, error)
func GetRangeReaderFromLink ¶ added in v4.0.9
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) 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)
}
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 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 ¶
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 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.
type SimpleReaderWithSize ¶
func (*SimpleReaderWithSize) Close ¶
func (r *SimpleReaderWithSize) Close() error
func (*SimpleReaderWithSize) GetSize ¶
func (r *SimpleReaderWithSize) GetSize() int64