mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-29 00:55:51 +08:00
121 lines
2.6 KiB
Go
121 lines
2.6 KiB
Go
package plg_backend_nop
|
|
|
|
import (
|
|
. "github.com/mickael-kerjean/filestash/server/common"
|
|
"io"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func init() {
|
|
Backend.Register("blackhole", BlackHole{})
|
|
}
|
|
|
|
type LargeFile struct {
|
|
Counter int
|
|
}
|
|
|
|
func (this *LargeFile) Read(p []byte) (n int, err error) {
|
|
if this.Counter <= 0 {
|
|
return 0, io.EOF
|
|
}
|
|
this.Counter = this.Counter - len(p)
|
|
lenp := len(p)
|
|
if lenp > 0 {
|
|
p[0] = '_'
|
|
}
|
|
for i := 0; i < lenp; i += 100 {
|
|
p[i] = '_'
|
|
}
|
|
return lenp, nil
|
|
}
|
|
|
|
func (this LargeFile) Close() error {
|
|
return nil
|
|
}
|
|
|
|
type BlackHole struct{}
|
|
|
|
func (this BlackHole) Init(params map[string]string, app *App) (IBackend, error) {
|
|
Log.Debug("plg_backend_nop::init params[%s]", params)
|
|
return &BlackHole{}, nil
|
|
}
|
|
|
|
func (this BlackHole) LoginForm() Form {
|
|
return Form{
|
|
Elmnts: []FormElement{
|
|
{
|
|
Name: "type",
|
|
Type: "hidden",
|
|
Value: "blackhole",
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (this BlackHole) Ls(path string) ([]os.FileInfo, error) {
|
|
files := make([]os.FileInfo, 0)
|
|
files = append(
|
|
files,
|
|
File{FName: "1M.bin", FType: "file", FSize: 1024 * 1024},
|
|
File{FName: "10M.bin", FType: "file", FSize: 1024 * 1024 * 10},
|
|
File{FName: "100M.bin", FType: "file", FSize: 1024 * 1024 * 100},
|
|
File{FName: "1G.bin", FType: "file", FSize: 1024 * 1024 * 1024},
|
|
File{FName: "10G.bin", FType: "file", FSize: 1024 * 1024 * 1024 * 1024},
|
|
File{FName: "100G.bin", FType: "file", FSize: 1024 * 1024 * 1024 * 1024 * 1024},
|
|
)
|
|
return files, nil
|
|
}
|
|
|
|
func (this BlackHole) Cat(path string) (io.ReadCloser, error) {
|
|
path = strings.TrimPrefix(path, "/")
|
|
if strings.HasSuffix(path, ".bin") == false {
|
|
return nil, ErrNotImplemented
|
|
}
|
|
path = strings.TrimSuffix(path, ".bin")
|
|
order := 1
|
|
if strings.HasSuffix(path, "K") {
|
|
path = strings.TrimSuffix(path, "K")
|
|
order = order * 1024
|
|
} else if strings.HasSuffix(path, "M") {
|
|
path = strings.TrimSuffix(path, "M")
|
|
order = order * 1024 * 1024
|
|
} else if strings.HasSuffix(path, "G") {
|
|
path = strings.TrimSuffix(path, "G")
|
|
order = order * 1024 * 1024 * 1024
|
|
}
|
|
i, err := strconv.Atoi(path)
|
|
if err != nil {
|
|
return nil, ErrNotImplemented
|
|
}
|
|
return &LargeFile{i * order}, nil
|
|
}
|
|
|
|
func (this BlackHole) Mkdir(path string) error {
|
|
return nil
|
|
}
|
|
|
|
func (this BlackHole) Rm(path string) error {
|
|
return ErrNotImplemented
|
|
}
|
|
|
|
func (this BlackHole) Mv(from, to string) error {
|
|
return ErrNotImplemented
|
|
}
|
|
|
|
func (this BlackHole) Save(path string, content io.Reader) error {
|
|
b := make([]byte, 32*1024*1024) // 32MB
|
|
for {
|
|
_, err := content.Read(b)
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (this BlackHole) Touch(path string) error {
|
|
return nil
|
|
}
|