53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package lib
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"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/s3manager"
|
|
)
|
|
|
|
func UploadToS3(filePath string) (*s3manager.UploadOutput, error) {
|
|
bucket := os.Getenv("BUCKET_NAME")
|
|
if bucket == "" {
|
|
fmt.Println("No S3 bucket specified, skipping upload.")
|
|
return nil, nil
|
|
}
|
|
|
|
endpoint := os.Getenv("AWS_ENDPOINT_URL_S3")
|
|
accessKeyID := os.Getenv("AWS_ACCESS_KEY_ID")
|
|
secretAccessKey := os.Getenv("AWS_SECRET_ACCESS_KEY")
|
|
|
|
sess, err := session.NewSession(&aws.Config{
|
|
Credentials: credentials.NewStaticCredentials(
|
|
accessKeyID,
|
|
secretAccessKey,
|
|
"",
|
|
),
|
|
Endpoint: aws.String(endpoint),
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to create session, %v", err)
|
|
}
|
|
|
|
file, err := os.Open(filePath)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to open file, %v", err)
|
|
}
|
|
defer file.Close()
|
|
|
|
uploader := s3manager.NewUploader(sess)
|
|
result, err := uploader.Upload(&s3manager.UploadInput{
|
|
Bucket: aws.String(bucket),
|
|
Key: aws.String(filePath),
|
|
Body: file,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to upload file, %v", err)
|
|
}
|
|
|
|
return result, nil
|
|
}
|