99 lines
1.4 KiB
Go
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, 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
|
|
}
|