53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package S3
|
|
|
|
import (
|
|
"fmt"
|
|
"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"
|
|
"strings"
|
|
)
|
|
|
|
func DeleteFromS3(imageURL string) error {
|
|
const op = "s3.DeleteFromS3"
|
|
|
|
parts := strings.SplitN(strings.TrimPrefix(imageURL, "https://s3.regru.cloud/"), "/", 2)
|
|
if len(parts) != 2 {
|
|
return fmt.Errorf("%s: invalid S3 URL format", op)
|
|
}
|
|
bucket := parts[0]
|
|
key := parts[1]
|
|
|
|
sess := session.Must(session.NewSession(&aws.Config{
|
|
Region: aws.String("ru-central1"),
|
|
Endpoint: aws.String("https://s3.regru.cloud"),
|
|
S3ForcePathStyle: aws.Bool(true),
|
|
Credentials: credentials.NewStaticCredentials(
|
|
"TJ946G2S1Z5FEI3I7DQQ",
|
|
"C2H2aITHRDpek8H921yhnrINZwDoADsjW3F6HURl",
|
|
"",
|
|
),
|
|
}))
|
|
|
|
svc := s3.New(sess)
|
|
|
|
_, err := svc.DeleteObject(&s3.DeleteObjectInput{
|
|
Bucket: aws.String(bucket),
|
|
Key: aws.String(key),
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("%s: failed to delete object from S3: %w", op, err)
|
|
}
|
|
|
|
err = svc.WaitUntilObjectNotExists(&s3.HeadObjectInput{
|
|
Bucket: aws.String(bucket),
|
|
Key: aws.String(key),
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("%s: failed to wait for object deletion: %w", op, err)
|
|
}
|
|
|
|
return nil
|
|
}
|