Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get resource URL from AWS S3 in a golang

I need to get public permanent (not signed) URL of a resource using golang and official aws go sdk. In Java AWS S3 SDK there's a method called getResourceUrl() what's the equivalent in go?

like image 229
oleynikd Avatar asked Sep 14 '25 11:09

oleynikd


1 Answers

This is how you get presigned URLs using the go sdk:

func GetFileLink(key string) (string, error) {
    svc := s3.New(some params)

    params := &s3.GetObjectInput{
        Bucket: aws.String(a bucket name),
        Key:    aws.String(key),
    }

    req, _ := svc.GetObjectRequest(params)

    url, err := req.Presign(15 * time.Minute) // Set link expiration time
    if err != nil {
        global.Log("[AWS GET LINK]:", params, err)
    }

    return url, err
}

If what you want is just the URL of a public access object you can build the URL yourself:

https://<region>.amazonaws.com/<bucket-name>/<key>

Where <region> is something like us-east-2. So using go it will be something like:

url := "https://%s.amazonaws.com/%s/%s"
url = fmt.Sprintf(url, "us-east-2", "my-bucket-name", "some-file.txt")

Here is a list of all the available regions for S3.

like image 120
Topo Avatar answered Sep 17 '25 01:09

Topo