2024-09-27 13:50:20 +05:00

99 lines
1.4 KiB
Go

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 {
filers := []string{filer}
sw, err := goseaweedfs.NewSeaweed(
masterUrl,
filers,
8096,
&http.Client{Timeout: 5 * time.Minute},
)
if err != nil {
panic("Failed to create seaweed: " + err.Error())
}
return &Weed{sw}
}
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
}