| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- package green_extension_uploader
- import (
- "fmt"
- "github.com/aliyun/alibaba-cloud-sdk-go/services/green"
- "github.com/aliyun/aliyun-oss-go-sdk/oss"
- "github.com/satori/go.uuid"
- "os"
- "bytes"
- "time"
- "encoding/json"
- )
- type uploadCredentials struct {
- AccessKeyId string `json:"accessKeyId"`
- AccessKeySecret string `json:"accessKeySecret"`
- SecurityToken string `json:"securityToken"`
- ExpiredTime int64 `json:"expiredTime"`
- OssEndpoint string `json:"ossEndpoint"`
- UploadBucket string `json:"uploadBucket"`
- UploadFolder string `json:"uploadFolder"`
- }
- type ClientUploader struct {
- GreenClient *green.Client
- UploadCredentials *uploadCredentials
- Headers map[string]string
- Prefix string
- }
- func GetImageUploaderClient(client *green.Client)(clientUploader *ClientUploader) {
- clientUploader = &ClientUploader{client, nil, make(map[string]string), "images"}
- return
- }
- func GetVideoUploaderClient(client *green.Client)(clientUploader *ClientUploader) {
- clientUploader = &ClientUploader{client, nil, make(map[string]string), "videos"}
- return
- }
- func GetVoiceUploaderClient(client *green.Client)(clientUploader *ClientUploader) {
- clientUploader = &ClientUploader{client, nil, make(map[string]string), "voices"}
- return
- }
- func GetFileUploaderClient(client *green.Client)(clientUploader *ClientUploader) {
- clientUploader = &ClientUploader{client, nil, make(map[string]string), "files"}
- return
- }
- func (clientUploader *ClientUploader)UploadFile(filepath string)(*string, error) {
- uploadCredentials, err := clientUploader.getUploadCredentials()
- fmt.Println(uploadCredentials.OssEndpoint)
- if uploadCredentials == nil {
- return nil, err
- }
- client, err := oss.New(uploadCredentials.OssEndpoint, uploadCredentials.AccessKeyId, uploadCredentials.AccessKeySecret, oss.SecurityToken(uploadCredentials.SecurityToken))
- if err != nil {
- fmt.Println("Error:", err)
- return nil, err
- }
- // 获取存储空间。
- bucket, err := client.Bucket(uploadCredentials.UploadBucket)
- if err != nil {
- fmt.Println("Error:", err)
- return nil, err
- }
- // 读取本地文件。
- fd, err := os.Open(filepath)
- if err != nil {
- fmt.Println("Error:", err)
- return nil, err
- }
- defer fd.Close()
- uuid := uuid.NewV4()
- object := uploadCredentials.UploadFolder + "/" + clientUploader.Prefix + "/" + uuid.String()
- // 上传文件流。
- err = bucket.PutObject(object, fd)
- if err != nil {
- fmt.Println("Error:", err)
- return nil, err
- }
- uploadedUrl :="oss://" + uploadCredentials.UploadBucket + "/" + object
- return &uploadedUrl, nil
- }
- func (clientUploader *ClientUploader)UploadBytes(dataBytes []byte)(*string, error) {
- uploadCredentials, err := clientUploader.getUploadCredentials()
- if uploadCredentials == nil {
- return nil, err
- }
- client, err := oss.New(uploadCredentials.OssEndpoint, uploadCredentials.AccessKeyId, uploadCredentials.AccessKeySecret, oss.SecurityToken(uploadCredentials.SecurityToken))
- if err != nil {
- fmt.Println("Error:", err)
- return nil, err
- }
- // 获取存储空间。
- bucket, err := client.Bucket(uploadCredentials.UploadBucket)
- if err != nil {
- fmt.Println("Error:", err)
- return nil, err
- }
- uuid := uuid.NewV4()
- object := uploadCredentials.UploadFolder + "/" + clientUploader.Prefix + "/" + uuid.String()
- // 上传文件流。
- err = bucket.PutObject(object, bytes.NewReader(dataBytes))
- if err != nil {
- fmt.Println("Error:", err)
- return nil, err
- }
- uploadedUrl :="oss://" + uploadCredentials.UploadBucket + "/" + object
- return &uploadedUrl, nil
- }
- func (clientUploader *ClientUploader)getUploadCredentials()(*uploadCredentials, error) {
- if clientUploader.UploadCredentials == nil || clientUploader.UploadCredentials.ExpiredTime < (time.Now().UnixNano() / 1e6) {
- uploadCredentials, err := clientUploader.getUploadCredentialsFromServer()
- if err == nil {
- clientUploader.UploadCredentials = uploadCredentials
- }
- return clientUploader.UploadCredentials, err
- }
- return clientUploader.UploadCredentials, nil
- }
- type uploadCredentialsResponse struct {
- Code int16 `json:"code"`
- Data uploadCredentials `json:"data"`
- Msg string `json:"msg"`
- RequestId string `json:"requestId"`
- }
- func (clientUploader *ClientUploader)getUploadCredentialsFromServer()(*uploadCredentials, error) {
- uploadCredentialsRequest := green.CreateUploadCredentialsRequest();
- dataJson, _:= json.Marshal(make(map[string]string))
- uploadCredentialsRequest.SetContent(dataJson)
- var uploadCredentials *uploadCredentials
- // 发起请求并处理异常
- response, err := clientUploader.GreenClient.UploadCredentials(uploadCredentialsRequest)
- if err != nil {
- // 异常处理
- return uploadCredentials, err
- }
- uploadCredentialsResponse := uploadCredentialsResponse{}
- err = json.Unmarshal([]byte(response.GetHttpContentString()), &uploadCredentialsResponse)
- if err == nil {
- uploadCredentials = &uploadCredentialsResponse.Data
- }
- return uploadCredentials, err
- }
|