Documentation
¶
Index ¶
- Variables
- 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 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) 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 SectionReader
- type SeekableStream
- type SimpleReaderWithSize
- type StreamSectionReader
Constants ¶
This section is empty.
Variables ¶
var (
ErrInvalidLink = errs.New("无效的链接")
)
错误定义
Functions ¶
func CacheFullInTempFileAndHash ¶
func CacheFullInTempFileAndHash(stream model.FileStreamer, up model.UpdateProgress, hashType *utils.HashType, hashParams ...any) (model.File, string, error)
CacheFullInTempFileAndHash 将流的内容缓存到临时文件并计算哈希值 如果提供了进度更新函数,则在读取过程中更新进度
func CacheFullInTempFileAndWriter ¶
func CacheFullInTempFileAndWriter(stream model.FileStreamer, up model.UpdateProgress, w io.Writer) (model.File, error)
CacheFullInTempFileAndWriter 将流的内容缓存到临时文件并同时写入指定的写入器 如果流已经有缓存文件,则直接使用该文件 如果提供了进度更新函数,则在读取过程中更新进度
func GetRangeReaderFromLink ¶ added in v4.2.3
GetRangeReaderFromLink 从链接创建范围读取器 它支持多种类型的链接,包括文件、URL和自定义范围读取器
func GetRangeReaderFromMFile ¶ added in v4.2.3
func GetRangeReaderFromMFile(size int64, file model.File) model.RangeReaderIF
GetRangeReaderFromMFile 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) 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 conf.MaxBufferLimit 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)
}
Limiter 接口定义了速率限制器的行为 它扩展了 golang.org/x/time/rate.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)
type RangeReaderFunc ¶ added in v4.2.3
type RangeReaderFunc func(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error)
RangeReaderFunc 是一个函数类型,用于实现 model.RangeReaderIF 接口 它允许将普通函数转换为范围读取器
func (RangeReaderFunc) RangeRead ¶ added in v4.2.3
func (f RangeReaderFunc) RangeRead(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error)
RangeRead 实现 model.RangeReaderIF 接口 它调用底层函数来执行范围读取
type RateLimitFile ¶
type RateLimitFile struct {
model.File // 底层文件
Limiter Limiter // 速率限制器
Ctx context.Context // 上下文,用于取消操作
}
RateLimitFile 实现了一个带速率限制的文件接口 它在每次读取操作后等待适当的时间,以确保不超过指定的速率
func (*RateLimitFile) Close ¶ added in v4.1.8
func (r *RateLimitFile) Close() error
Close 实现了 io.Closer 接口
type RateLimitRangeReaderFunc ¶ added in v4.2.3
type RateLimitRangeReaderFunc RangeReaderFunc
RateLimitRangeReaderFunc 是一个带速率限制的范围读取函数
func (RateLimitRangeReaderFunc) RangeRead ¶ added in v4.2.3
func (f RateLimitRangeReaderFunc) RangeRead(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error)
RangeRead 实现了 model.RangeReaderIF 接口,增加了速率限制 它首先调用底层的范围读取函数,然后将结果包装在一个带速率限制的读取器中
type RateLimitReader ¶
type RateLimitReader struct {
io.Reader // 底层读取器
Limiter Limiter // 速率限制器
Ctx context.Context // 上下文,用于取消操作
}
RateLimitReader 实现了一个带速率限制的读取器 它在每次读取操作后等待适当的时间,以确保不超过指定的速率
func (*RateLimitReader) Close ¶
func (r *RateLimitReader) Close() error
Close 实现了 io.Closer 接口 如果底层读取器支持关闭,则关闭它
type RateLimitWriter ¶
type RateLimitWriter struct {
io.Writer // 底层写入器
Limiter Limiter // 速率限制器
Ctx context.Context // 上下文,用于取消操作
}
RateLimitWriter 实现了一个带速率限制的写入器 它在每次写入操作后等待适当的时间,以确保不超过指定的速率
func (*RateLimitWriter) Close ¶
func (w *RateLimitWriter) Close() error
Close 实现了 io.Closer 接口 如果底层写入器支持关闭,则关闭它
type ReaderUpdatingProgress ¶
type ReaderUpdatingProgress struct {
Reader ReaderWithSize
model.UpdateProgress
// contains filtered or unexported fields
}
func (*ReaderUpdatingProgress) Close ¶
func (r *ReaderUpdatingProgress) Close() error
type ReaderWithCtx ¶
ReaderWithCtx 是一个带有上下文的读取器 它在每次读取操作前检查上下文是否已取消
type ReaderWithSize ¶
type ReaderWithSize interface {
io.ReadCloser
GetSize() int64
}
type SectionReader ¶ added in v4.3.4
type SectionReader struct {
io.ReadSeeker
// contains filtered or unexported fields
}
type SeekableStream ¶
type SeekableStream struct {
*FileStream
// contains filtered or unexported fields
}
SeekableStream 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.2.4
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
type StreamSectionReader ¶ added in v4.3.4
type StreamSectionReader struct {
// contains filtered or unexported fields
}
func NewStreamSectionReader ¶ added in v4.3.4
func NewStreamSectionReader(file model.FileStreamer, maxBufferSize int) (*StreamSectionReader, error)
func (*StreamSectionReader) GetSectionReader ¶ added in v4.3.4
func (ss *StreamSectionReader) GetSectionReader(off, length int64) (*SectionReader, error)
func (*StreamSectionReader) RecycleSectionReader ¶ added in v4.3.4
func (ss *StreamSectionReader) RecycleSectionReader(sr *SectionReader)