feat: s3 server support (#6088 close #5186)

Currently tested: List, Get, Remove
This commit is contained in:
itsHenry
2024-03-02 15:35:10 +08:00
committed by GitHub
parent f8b1f87a5f
commit d0f88bd1cb
14 changed files with 875 additions and 16 deletions

36
server/s3/ioutils.go Normal file
View File

@ -0,0 +1,36 @@
// Credits: https://pkg.go.dev/github.com/rclone/rclone@v1.65.2/cmd/serve/s3
// Package s3 implements a fake s3 server for alist
package s3
import "io"
type noOpReadCloser struct{}
type readerWithCloser struct {
io.Reader
closer func() error
}
var _ io.ReadCloser = &readerWithCloser{}
func (d noOpReadCloser) Read(b []byte) (n int, err error) {
return 0, io.EOF
}
func (d noOpReadCloser) Close() error {
return nil
}
func limitReadCloser(rdr io.Reader, closer func() error, sz int64) io.ReadCloser {
return &readerWithCloser{
Reader: io.LimitReader(rdr, sz),
closer: closer,
}
}
func (rwc *readerWithCloser) Close() error {
if rwc.closer != nil {
return rwc.closer()
}
return nil
}