package weed import ( "bytes" "donat-widget/internal/model" "github.com/linxGnu/goseaweedfs" "io" "net/http" "time" ) type Weed struct { operation *goseaweedfs.Seaweed } func NewWeed( filer string, masterUrl string, ) (*Weed, error) { filers := []string{filer} sw, err := goseaweedfs.NewSeaweed( masterUrl, filers, 8096, &http.Client{Timeout: 5 * time.Minute}, ) if err != nil { return &Weed{}, err } return &Weed{sw}, err } func (weed *Weed) Upload( file model.UploadFile, filename string, size int64, collection string, ) (model.FileData, error) { var fileData model.FileData fileData, err := weed.operation.Upload( *file, filename, size, collection, "", ) if err != nil { return fileData, err } return fileData, nil } func (weed *Weed) Download( FileID model.FileID, ) (model.DownloadFile, error) { var fileBuffer bytes.Buffer _, err := weed.operation.Download( string(FileID), nil, func(r io.Reader) error { _, err := io.Copy(&fileBuffer, r) return err }, ) file := fileBuffer.Bytes() if err != nil { return file, err } return file, nil } func (weed *Weed) Update( file model.UploadFile, fileID model.FileID, filename string, size int64, collection string, ) error { err := weed.operation.Replace( string(fileID), *file, filename, size, collection, "", true, ) if err != nil { return err } return nil }