feat: add minio service implementation, download midjourney image to local storage

This commit is contained in:
RockYang
2023-08-20 16:17:42 +08:00
parent 329e3eee21
commit 6561b99f8f
13 changed files with 316 additions and 98 deletions

View File

@@ -0,0 +1,54 @@
package service
import (
"chatplus/core/types"
"chatplus/utils"
"context"
"fmt"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"net/url"
"path"
"strings"
)
type MinioService struct {
config *types.AppConfig
client *minio.Client
}
func NewMinioService(config *types.AppConfig) (*MinioService, error) {
minioClient, err := minio.New(config.MinioConfig.Endpoint, &minio.Options{
Creds: credentials.NewStaticV4(config.MinioConfig.AccessKey, config.MinioConfig.AccessSecret, ""),
Secure: config.MinioConfig.UseSSL,
})
if err != nil {
return nil, err
}
return &MinioService{config: config, client: minioClient}, nil
}
func (s *MinioService) UploadMjImg(imageURL string) (string, error) {
parsedURL, err := url.Parse(imageURL)
if err != nil {
return "", err
}
filename := path.Base(parsedURL.Path)
imageBytes, err := utils.DownloadImage(imageURL, s.config.ProxyURL)
if err != nil {
return "", err
}
info, err := s.client.PutObject(
context.Background(),
s.config.MinioConfig.Bucket,
filename,
strings.NewReader(string(imageBytes)),
int64(len(imageBytes)),
minio.PutObjectOptions{ContentType: "image/png"})
if err != nil {
return "", err
}
return fmt.Sprintf("%s/%s/%s", s.config.MinioConfig.Domain, s.config.MinioConfig.Bucket, info.Key), nil
}