mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2026-10-10 13:03:09 +08:00
6de15b6310
* feat(stream): enhance GetRangeReaderFromLink rate limiting * refactor(stream): update GetRangeReaderFromMFile to return *model.FileRangeReader * refactor(stream): simplify context error handling in RateLimitReader, RateLimitWriter, and RateLimitFile * refactor(net): replace custom LimitedReadCloser with readers.NewLimitedReadCloser * fix(model): update Link.ContentLength JSON tag for correct serialization * docs(model): add clarification to FileRangeReader usage comment
36 lines
751 B
Go
36 lines
751 B
Go
package model
|
|
|
|
import (
|
|
"errors"
|
|
"io"
|
|
)
|
|
|
|
// File is basic file level accessing interface
|
|
type File interface {
|
|
io.Reader
|
|
io.ReaderAt
|
|
io.Seeker
|
|
}
|
|
type FileCloser struct {
|
|
File
|
|
io.Closer
|
|
}
|
|
|
|
func (f *FileCloser) Close() error {
|
|
var errs []error
|
|
if clr, ok := f.File.(io.Closer); ok {
|
|
errs = append(errs, clr.Close())
|
|
}
|
|
if f.Closer != nil {
|
|
errs = append(errs, f.Closer.Close())
|
|
}
|
|
return errors.Join(errs...)
|
|
}
|
|
|
|
// FileRangeReader 是对 RangeReaderIF 的轻量包装,表明由 RangeReaderIF.RangeRead
|
|
// 返回的 io.ReadCloser 同时实现了 model.File(即支持 Read/ReadAt/Seek)。
|
|
// 只有满足这些才需要使用 FileRangeReader,否则直接使用 RangeReaderIF 即可。
|
|
type FileRangeReader struct {
|
|
RangeReaderIF
|
|
}
|