68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package backup
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
|
"github.com/aws/aws-sdk-go-v2/config"
|
|
"github.com/aws/aws-sdk-go-v2/credentials"
|
|
"github.com/aws/aws-sdk-go-v2/service/s3"
|
|
)
|
|
|
|
func UploadParquetToSpaces(localFilePath, objectPath string) (string, error) {
|
|
|
|
region := os.Getenv("DO_SPACES_REGION")
|
|
endpoint := os.Getenv("DO_SPACES_ENDPOINT")
|
|
bucket := os.Getenv("DO_SPACES_BUCKET")
|
|
accessKey := os.Getenv("DO_SPACES_ACCESS_KEY")
|
|
secretKey := os.Getenv("DO_SPACES_SECRET_KEY")
|
|
|
|
cfg, err := config.LoadDefaultConfig(
|
|
context.TODO(),
|
|
config.WithRegion(region),
|
|
config.WithCredentialsProvider(
|
|
credentials.NewStaticCredentialsProvider(accessKey, secretKey, ""),
|
|
),
|
|
config.WithEndpointResolver(
|
|
aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
|
|
return aws.Endpoint{
|
|
URL: "https://" + endpoint,
|
|
SigningRegion: region,
|
|
}, nil
|
|
}),
|
|
),
|
|
)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
client := s3.NewFromConfig(cfg)
|
|
|
|
file, err := os.Open(localFilePath)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer file.Close()
|
|
|
|
_, err = client.PutObject(context.TODO(), &s3.PutObjectInput{
|
|
Bucket: aws.String(bucket),
|
|
Key: aws.String(objectPath),
|
|
Body: file,
|
|
ContentType: aws.String("application/octet-stream"),
|
|
ACL: "public-read",
|
|
})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
cdnURL := fmt.Sprintf(
|
|
"https://images.nearle.app/%s",
|
|
filepath.ToSlash(objectPath),
|
|
)
|
|
|
|
return cdnURL, nil
|
|
}
|