FEAT: Initial Upload Page
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/service/s3"
|
||||
)
|
||||
|
||||
var S3Client S3
|
||||
|
||||
type S3 interface {
|
||||
GetPresignedURL(ctx context.Context, key, contentType string, expiry time.Duration) (string, error)
|
||||
DoesFileExist(ctx context.Context, key string) (bool, error)
|
||||
}
|
||||
|
||||
type S3Concrete struct {
|
||||
S3Client *s3.Client
|
||||
Bucket string
|
||||
}
|
||||
|
||||
func (svc S3Concrete) GetPresignedURL(ctx context.Context, key, contentType string, expiry time.Duration) (string, error) {
|
||||
presignClient := s3.NewPresignClient(svc.S3Client)
|
||||
|
||||
request, err := presignClient.PresignPutObject(ctx, &s3.PutObjectInput{
|
||||
Bucket: &svc.Bucket,
|
||||
Key: &key,
|
||||
ContentType: &contentType,
|
||||
}, s3.WithPresignExpires(expiry))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return request.URL, nil
|
||||
}
|
||||
|
||||
func (svc S3Concrete) DoesFileExist(ctx context.Context, key string) (bool, error) {
|
||||
_, error := svc.S3Client.HeadObject(ctx, &s3.HeadObjectInput{
|
||||
Bucket: &svc.Bucket,
|
||||
Key: &key,
|
||||
})
|
||||
|
||||
if error != nil {
|
||||
return false, error
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
Reference in New Issue
Block a user