minio
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
MINIO_ROOT_USER=用户名 MINIO_ROOT_PASSWORD=密码 nohup ./minio server /mnt --console-address ":端口" >> minio`date +%Y-%m-%d`.out 2>&1 &
登陆minio后台创建存储桶
点存储桶上传文件
分享文件:
http://ip:port/存储桶/文件
创建匿名用户的访问权限规则
创建access key
api操作文档:
https://min.io/docs/minio/linux/developers/go/API.html
上传代码:
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"sync"
)
var onceS3 sync.Once
var S3 S3Service
func S3ToService(ctx g.Ctx) S3Service {
onceS3.Do(func() {
S3 = NewS3Service(ctx)
})
return S3
}
type S3Service interface {
S3Upload(fd []byte, filetype string, filename string, filesize int64) string
ExistBucket(bulkName string) bool
GetObject(bulkName string, ObjectName string) *minio.Object
}
func NewS3Service(ctx g.Ctx) S3Service {
// s := g.Cfg()
endpoint := "地址:端口"
accessKeyID := "accessKeyID"
secretAccessKey := "secretAccessKey"
useSSL := false
// Initialize minio client object.
minioClient, _ := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
Secure: useSSL,
})
s3 := &S3Servant{
client: minioClient,
}
return s3
}
type S3Servant struct {
client *minio.Client
}
func (s *S3Servant) S3Upload(fd []byte, filetype string, filename string, filesize int64) string {
// objectsize 传递'-1'将占用内存
tmp := filetype + "/" + filename
info, err := s.client.PutObject(context.Background(), "tender", tmp, bytes.NewReader(fd), filesize,
minio.PutObjectOptions{ContentType: http.DetectContentType(fd)})
if err != nil {
log.Fatalln(err)
}
log.Println("INFO------------------------------>", info.Location)
return info.Location
}
func (s *S3Servant) ExistBucket(bulkName string) bool {
exist, err := s.client.BucketExists(context.Background(), bulkName)
if err != nil {
log.Fatalf("is exist bulk eror " + err.Error())
return false
}
return exist
}
func (s *S3Servant) GetObject(bulkName string, ObjectName string) *minio.Object {
object, err := s.client.GetObject(context.Background(), bulkName, ObjectName, minio.GetObjectOptions{})
if err != nil {
fmt.Println(err)
}
//defer object.Close()
return object
}
var S3 s3.S3Service
func InitializeS3(ctx g.Ctx) {
S3 = s3.S3ToService(ctx)
}
Main = gcmd.Command{
Name: "main",
Usage: "main",
Brief: "start http server",
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
g.Log().SetFlags(glog.F_ASYNC | glog.F_TIME_DATE | glog.F_TIME_TIME | glog.F_FILE_LONG)
g.Log().Info(ctx, "TENDER version:", consts.Version)
service.InitializeS3(ctx)
service.Initialize(ctx)
//启动服务
websocket.StartWebSocket(ctx)
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
router.R.BindController(ctx, group)
//注册路由
group.ALL("/ws", websocket.WsPage)
})
enhanceOpenAPIDoc(s)
s.Run()
return nil
},
}