package fileCos import ( "bytes" "context" "epur-pay/pkg/logger" "fmt" "github.com/tencentyun/cos-go-sdk-v5" "io" "net/http" "net/url" "reflect" ) /* 腾讯Cos */ type Cos struct { AccessKeyId string AccessKeySecret string BucketName string EndPoint string Access string ReadPrivate bool Appid string client *cos.Client } func New(accessKeyId, accessKeySecret, bucketName, endPoint string, access string, Appid string) (*Cos, error) { var instance *Cos instance = &Cos{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, BucketName: bucketName, EndPoint: endPoint, Access: access, Appid: Appid, } //cos.NewClient() uu := fmt.Sprintf( "https://%s-%s.%s", instance.BucketName, instance.Appid, instance.EndPoint) logger.AccessLogger.Infoln("cos -> ", uu) endPoint1, _ := url.Parse(uu) client := cos.NewClient( &cos.BaseURL{BucketURL: endPoint1}, &http.Client{ Transport: &cos.AuthorizationTransport{ SecretID: instance.AccessKeyId, SecretKey: instance.AccessKeySecret, }, }) instance.client = client return instance, nil } func (this *Cos) url(fileName string) string { return fmt.Sprintf("https://%s/%s", this.Access, fileName) } func (this *Cos) ReadUrl(filePath string) string { return this.url(filePath) } func (this *Cos) Put(fileName string, contentType string, data interface{}) string { var ossData io.Reader typeOf := reflect.TypeOf(data).Kind() //logger.AccessLogger.Infoln("类型:", typeOf) switch typeOf { case reflect.Slice: ossData = bytes.NewBuffer(data.([]byte)) case reflect.Struct: ossData = data.(io.Reader) default: panic("数据不合法!") } //oss.SetHeader("content-type", contentType) _, err := this.client.Object.Put(context.Background(), fileName, ossData, nil) if err != nil { logger.AccessLogger.Error("上传失败!") panic(err.Error()) } return this.url(fileName) } func (this *Cos) Token(key string, contentType string) (map[string]interface{}, error) { return nil, nil }