Untitled
unknown
golang
2 years ago
1.7 kB
8
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...