liuhaijun e94826ce29 add server
Change-Id: I0760f17f6a01c0121b59fcbfafc666032dbc30af
2024-09-19 09:44:15 +00:00

112 lines
3.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"crypto/tls"
"crypto/x509"
cf "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config"
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/utils"
"github.com/minio/minio-go"
"log"
"net/http"
"net/url"
"os"
"path/filepath"
"time"
)
func GetPresignedUrl(bucketName, filename string, second int64) (u *url.URL, err error) {
s3Client, err := getMinioClient()
if err != nil {
log.Println(err)
return nil, err
}
reqParams := make(url.Values)
reqParams.Set("response-content-disposition", "attachment; filename="+filename)
presignedURL, err := s3Client.PresignedGetObject(bucketName, filename, time.Duration(second)*time.Second, reqParams)
if err != nil {
log.Println(err)
return nil, err
}
return presignedURL, err
}
func PostPresignedUrl(bucketName, filename string, second int64) (formData map[string]string, err error) {
policy := minio.NewPostPolicy()
policy.SetBucket(bucketName)
policy.SetKey(filename)
policy.SetExpires(time.Now().UTC().Add(time.Duration(second) * time.Second))
s3Client, err := getMinioClient()
if err != nil {
log.Println(err)
return nil, err
}
presignedURL, formData, err := s3Client.PresignedPostPolicy(policy)
if err != nil {
log.Println(err)
return nil, err
}
formData["upload-url"] = presignedURL.String()
return formData, err
}
func PutPresignedUrl(bucketName, filename string, second int64) (data map[string]string, err error) {
s3Client, err := getMinioClient()
if err != nil {
log.Println(err)
return nil, err
}
presignedURL, err := s3Client.PresignedPutObject(bucketName, filename, time.Duration(second)*time.Second)
if err != nil {
log.Println(err)
return nil, err
}
res := map[string]string{
"bucketName": bucketName,
"presignedUrl": presignedURL.String(),
}
return res, err
}
func UploadFile(bucketName, objectName, filePath string) error {
s3Client, err := getMinioClient()
exists, _ := s3Client.BucketExists(bucketName)
if !exists {
err = s3Client.MakeBucket(bucketName, "beijing")
if err != nil {
log.Printf("创建存储桶 %s 失败", bucketName)
}
}
n, err := s3Client.FPutObject(bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: "application/zip"})
if err != nil || n < 1 {
log.Printf("上传文件失败 %v ", err)
return err
}
return nil
}
func getMinioClient() (*minio.Client, error) {
// 初始化证书池
certPool := x509.NewCertPool()
caCrt, err := os.ReadFile(filepath.Join(utils.GetRunPath(), "config/certs/minio.public.crt"))
if err != nil {
log.Fatalln("public.crt read error:", err)
}
certPool.AppendCertsFromPEM(caCrt)
transport := &http.Transport{
TLSClientConfig: &tls.Config{
RootCAs: certPool, // 设置双向认证的证书
// Certificates: []tls.Certificate{clientCrt}, // 客户端证书,需要传递给服务端
InsecureSkipVerify: true, // 是否验证服务端证书True为不验证
},
}
minioClient, err := minio.New(cf.Config.Minio.Endpoint, cf.Config.Minio.AccessKey, cf.Config.Minio.SecretAccessKey, true)
if err != nil {
log.Println(err)
return nil, err
}
minioClient.SetCustomTransport(transport)
return minioClient, nil
}