Files
common-server-public/bbs-go/server/internal/pkg/uploader/local_uploader.go
2025-03-03 17:43:50 +08:00

42 lines
1.0 KiB
Go

package uploader
import (
"bbs-go/internal/pkg/bbsurls"
"io/ioutil"
"os"
"path/filepath"
"bbs-go/internal/pkg/config"
)
// 本地文件系统
type localUploader struct{}
func (local *localUploader) PutImage(data []byte, contentType string) (string, error) {
key := generateImageKey(data, contentType)
return local.PutObject(key, data, contentType)
}
func (local *localUploader) PutObject(key string, data []byte, contentType string) (string, error) {
if err := os.MkdirAll("/", os.ModeDir); err != nil {
return "", err
}
c := config.Instance.Uploader.Local
filename := filepath.Join(c.Path, key)
if err := os.MkdirAll(filepath.Dir(filename), os.ModePerm); err != nil {
return "", err
}
if err := ioutil.WriteFile(filename, data, os.ModePerm); err != nil {
return "", err
}
return bbsurls.UrlJoin(c.Host, key), nil
}
func (local *localUploader) CopyImage(originUrl string) (string, error) {
data, contentType, err := download(originUrl)
if err != nil {
return "", err
}
return local.PutImage(data, contentType)
}