S3
Connect to AWS S3 with AWS SDK v2 credentials, custom clients, public URLs, and signed URLs.
Create the adapter
package main
import (
"context"
files "github.com/cersho/gofiles-sdk"
"github.com/cersho/gofiles-sdk/providers/s3"
)
func newClient(ctx context.Context) (*files.Client, error) {
adapter, err := s3.New(ctx, s3.Options{
Bucket: "uploads",
Region: "us-east-1",
})
if err != nil {
return nil, err
}
return files.New(files.Options{Adapter: adapter})
}Credentials
By default, the adapter uses the AWS SDK credential chain and region settings. These environment variables are commonly used:
| Variable | Purpose |
|---|---|
AWS_REGION | Bucket region. |
AWS_DEFAULT_REGION | Fallback bucket region. |
AWS_ACCESS_KEY_ID | Access key ID. |
AWS_SECRET_ACCESS_KEY | Secret access key. |
AWS_SESSION_TOKEN | Optional session token. |
You can also pass static credentials:
adapter, err := s3.New(ctx, s3.Options{
Bucket: "uploads",
Region: "us-east-1",
Credentials: &s3.Credentials{
AccessKeyID: os.Getenv("AWS_ACCESS_KEY_ID"),
SecretAccessKey: os.Getenv("AWS_SECRET_ACCESS_KEY"),
},
})Signed URLs
url, err := client.URL(ctx, "reports/q1.pdf", files.URLOptions{
ExpiresIn: 15 * time.Minute,
})
if err != nil {
return err
}
fmt.Println(url)Use PublicBaseURL when reads should return a public CDN URL instead of a presigned URL.
adapter, err := s3.New(ctx, s3.Options{
Bucket: "uploads",
Region: "us-east-1",
PublicBaseURL: "https://cdn.acme.internal",
})