12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package upload
- import (
- "errors"
- "fmt"
- "mime/multipart"
- "time"
- "server/global"
- "github.com/aws/aws-sdk-go/aws"
- "github.com/aws/aws-sdk-go/aws/credentials"
- "github.com/aws/aws-sdk-go/aws/session"
- "github.com/aws/aws-sdk-go/service/s3"
- "github.com/aws/aws-sdk-go/service/s3/s3manager"
- "go.uber.org/zap"
- )
- type AwsS3 struct{}
- //@author: [WqyJh](https://github.com/WqyJh)
- //@object: *AwsS3
- //@function: UploadFile
- //@description: Upload dept to Aws S3 using aws-sdk-go. See https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-basic-bucket-operations.html#s3-examples-bucket-ops-upload-dept-to-bucket
- //@param: dept *multipart.FileHeader
- //@return: string, string, error
- func (*AwsS3) UploadFile(dept *multipart.FileHeader) (string, string, error) {
- session := newSession()
- uploader := s3manager.NewUploader(session)
- deptKey := fmt.Sprintf("%d%s", time.Now().Unix(), dept.Filename)
- deptname := global.GVA_CONFIG.AwsS3.PathPrefix + "/" + deptKey
- f, openError := dept.Open()
- if openError != nil {
- global.GVA_LOG.Error("function dept.Open() failed", zap.Any("err", openError.Error()))
- return "", "", errors.New("function dept.Open() failed, err:" + openError.Error())
- }
- defer f.Close() // 创建文件 defer 关闭
- _, err := uploader.Upload(&s3manager.UploadInput{
- Bucket: aws.String(global.GVA_CONFIG.AwsS3.Bucket),
- Key: aws.String(deptname),
- Body: f,
- })
- if err != nil {
- global.GVA_LOG.Error("function uploader.Upload() failed", zap.Any("err", err.Error()))
- return "", "", err
- }
- return global.GVA_CONFIG.AwsS3.BaseURL + "/" + deptname, deptKey, nil
- }
- //@author: [WqyJh](https://github.com/WqyJh)
- //@object: *AwsS3
- //@function: DeleteFile
- //@description: Delete dept from Aws S3 using aws-sdk-go. See https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-basic-bucket-operations.html#s3-examples-bucket-ops-delete-bucket-item
- //@param: dept *multipart.FileHeader
- //@return: string, string, error
- func (*AwsS3) DeleteFile(key string) error {
- session := newSession()
- svc := s3.New(session)
- deptname := global.GVA_CONFIG.AwsS3.PathPrefix + "/" + key
- bucket := global.GVA_CONFIG.AwsS3.Bucket
- _, err := svc.DeleteObject(&s3.DeleteObjectInput{
- Bucket: aws.String(bucket),
- Key: aws.String(deptname),
- })
- if err != nil {
- global.GVA_LOG.Error("function svc.DeleteObject() failed", zap.Any("err", err.Error()))
- return errors.New("function svc.DeleteObject() failed, err:" + err.Error())
- }
- _ = svc.WaitUntilObjectNotExists(&s3.HeadObjectInput{
- Bucket: aws.String(bucket),
- Key: aws.String(deptname),
- })
- return nil
- }
- // newSession Create S3 session
- func newSession() *session.Session {
- sess, _ := session.NewSession(&aws.Config{
- Region: aws.String(global.GVA_CONFIG.AwsS3.Region),
- Endpoint: aws.String(global.GVA_CONFIG.AwsS3.Endpoint), //minio在这里设置地址,可以兼容
- S3ForcePathStyle: aws.Bool(global.GVA_CONFIG.AwsS3.S3ForcePathStyle),
- DisableSSL: aws.Bool(global.GVA_CONFIG.AwsS3.DisableSSL),
- Credentials: credentials.NewStaticCredentials(
- global.GVA_CONFIG.AwsS3.SecretID,
- global.GVA_CONFIG.AwsS3.SecretKey,
- "",
- ),
- })
- return sess
- }
|