Documentation
¶
Index ¶
- Constants
- func CacheFullInTempFileAndHash(stream model.FileStreamer, hashType *utils.HashType, params ...any) (model.File, string, error)
- func CacheFullInTempFileAndUpdateProgress(stream model.FileStreamer, up model.UpdateProgress) (model.File, error)
- func CacheFullInTempFileAndWriter(stream model.FileStreamer, w io.Writer) (model.File, error)
- func GetRangeReadCloserFromLink(size int64, link *model.Link) (model.RangeReadCloserIF, error)
- func NewMultiReaderAt(ss []*SeekableStream) (readerutil.SizeReaderAt, error)
- func RequestRangedHttp(ctx context.Context, link *model.Link, offset, length int64) (*http.Response, error)
- type FileReadAtSeeker
- func (f *FileReadAtSeeker) Close() error
- func (f *FileReadAtSeeker) GetRawStream() *SeekableStream
- func (f *FileReadAtSeeker) Read(p []byte) (n int, err error)
- func (f *FileReadAtSeeker) ReadAt(p []byte, off int64) (n int, err error)
- func (f *FileReadAtSeeker) Seek(offset int64, whence int) (int64, 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
- func (r *RangeReadReadAtSeeker) Close() error
- func (r *RangeReadReadAtSeeker) GetRawStream() *SeekableStream
- func (r *RangeReadReadAtSeeker) InitHeadCache()
- func (r *RangeReadReadAtSeeker) Read(p []byte) (n int, err error)
- func (r *RangeReadReadAtSeeker) ReadAt(p []byte, off int64) (int, error)
- func (r *RangeReadReadAtSeeker) Seek(offset int64, whence int) (int64, error)
- type RateLimitFile
- type RateLimitRangeReadCloser
- type RateLimitReader
- type RateLimitWriter
- type ReaderUpdatingProgress
- type ReaderWithCtx
- type ReaderWithSize
- type SStreamReadAtSeeker
- type SeekableStream
- type SimpleReaderWithSize
Constants ¶
const InMemoryBufMaxSize = 10 // Megabytes
const InMemoryBufMaxSizeBytes = InMemoryBufMaxSize * 1024 * 1024
Variables ¶
This section is empty.
Functions ¶
func CacheFullInTempFileAndUpdateProgress ¶
func CacheFullInTempFileAndUpdateProgress(stream model.FileStreamer, up model.UpdateProgress) (model.File, error)
func NewMultiReaderAt ¶
func NewMultiReaderAt(ss []*SeekableStream) (readerutil.SizeReaderAt, error)
Types ¶
type FileReadAtSeeker ¶
type FileReadAtSeeker struct {
// contains filtered or unexported fields
}
func (*FileReadAtSeeker) Close ¶
func (f *FileReadAtSeeker) Close() error
func (*FileReadAtSeeker) GetRawStream ¶
func (f *FileReadAtSeeker) GetRawStream() *SeekableStream
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) Close ¶
func (r *RangeReadReadAtSeeker) Close() error
func (*RangeReadReadAtSeeker) GetRawStream ¶
func (r *RangeReadReadAtSeeker) GetRawStream() *SeekableStream
func (*RangeReadReadAtSeeker) InitHeadCache ¶
func (r *RangeReadReadAtSeeker) InitHeadCache()
func (*RangeReadReadAtSeeker) Read ¶
func (r *RangeReadReadAtSeeker) Read(p []byte) (n int, err error)
type RateLimitFile ¶
type RateLimitRangeReadCloser ¶
type RateLimitRangeReadCloser struct {
model.RangeReadCloserIF
Limiter Limiter
}
func (*RateLimitRangeReadCloser) RangeRead ¶
func (rrc *RateLimitRangeReadCloser) 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 SStreamReadAtSeeker ¶
type SStreamReadAtSeeker interface {
model.File
GetRawStream() *SeekableStream
}
func NewReadAtSeeker ¶
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 ¶
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.
type SimpleReaderWithSize ¶
func (*SimpleReaderWithSize) Close ¶
func (r *SimpleReaderWithSize) Close() error
func (*SimpleReaderWithSize) GetSize ¶
func (r *SimpleReaderWithSize) GetSize() int64