Skip to content

Instantly share code, notes, and snippets.

@wthorp
Created September 29, 2021 20:33
Show Gist options
  • Save wthorp/18d5c2a39f418957230939331bd3d087 to your computer and use it in GitHub Desktop.
Save wthorp/18d5c2a39f418957230939331bd3d087 to your computer and use it in GitHub Desktop.
go presigned post
package main
import (
"crypto/md5"
"encoding/base64"
"fmt"
"log"
"net/http"
"os"
"strings"
"time"
"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"
)
func main() {
sdkEndpoint := os.Getenv("AWS_ENDPOINT")
accessKey := os.Getenv("AWS_ACCESS_KEY_ID")
secretKey := os.Getenv("AWS_SECRET_ACCESS_KEY")
creds := credentials.NewStaticCredentials(accessKey, secretKey, "")
s3Config := &aws.Config{
Credentials: creds,
Endpoint: aws.String(sdkEndpoint),
Region: aws.String("us-east-1"),
S3ForcePathStyle: aws.Bool(true),
}
session, err := session.NewSession()
if err != nil {
fmt.Println("error presigning request", err)
return
}
// Create an S3 service object in the default region.
s3Client := s3.New(session, s3Config)
// Output to stdout instead of the default stderr
log.SetOutput(os.Stdout)
resp, _ := s3Client.PutObjectRequest(&s3.PutObjectInput{
Bucket: aws.String("testbucket"),
Key: aws.String("testkey"),
Body: strings.NewReader("test"),
})
h := md5.New()
md5s := base64.StdEncoding.EncodeToString(h.Sum(nil))
resp.HTTPRequest.Header.Set("Content-MD5", md5s)
url, err := resp.Presign(15 * time.Minute)
if err != nil {
fmt.Println("error presigning request", err)
return
}
req, err := http.NewRequest("PUT", url, strings.NewReader("test"))
req.Header.Set("Content-MD5", md5s)
if err != nil {
fmt.Println("error creating request", url)
return
}
defClient, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println("error making HTTP request", url)
return
}
defer defClient.Body.Close()
fmt.Println(defClient.Body, defClient.StatusCode)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment