Untitled

 avatar
unknown
golang
2 years ago
1.7 kB
5
Indexable
package aws

import (
	"bytes"
	. "core/logger"
	"core/models"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awsutil"
	"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"

	"net/http"
	"os"
)

const TAG_S3 = "[Core_S3]\t"

func PutItem(bucketName string, filePath string, fileName, s3Path string) string {
	file, err := os.Open(filePath)
	if err != nil {
		Logger.Error(TAG_S3+"[PutItem]err opening file: %s", err)
	}
	defer file.Close()
	fileInfo, _ := file.Stat()
	size := fileInfo.Size()
	buffer := make([]byte, size) // read file content to buffer

	file.Read(buffer)
	fileBytes := bytes.NewReader(buffer)
	fileType := http.DetectContentType(buffer)
	path := "/" + s3Path + "/" + fileName
	Logger.Debug(TAG_S3+"[PutItem]path: %s", path)

	newSession := session.New()

	var awsConfig *aws.Config
	awsConfig = &aws.Config{
		Credentials: credentials.NewStaticCredentials(models.AWS_ACCESSKEY, models.AWS_SECRETKEY, ""),
		Region:      aws.String("ap-northeast-1"),
	}

	svc := s3.New(newSession, awsConfig)

	params := &s3.PutObjectInput{
		Bucket:        aws.String(bucketName),
		Key:           aws.String(path),
		ACL:           aws.String("public-read"),
		Body:          fileBytes,
		ContentLength: aws.Int64(size),
		ContentType:   aws.String(fileType),
	}
	resp, err := svc.PutObject(params)
	if err != nil {
		Logger.Error(TAG_S3+"[PutItem]bad response: %s", err.Error())
	}
	Logger.Debug(TAG_S3+"[PutItem]response %s", awsutil.StringValue(resp))
	return "https://s3-ap-northeast-1.amazonaws.com/" + bucketName + path
}
Editor is loading...