Example for GO
Installing
go get github.com/aws/aws-sdk-go-v2/awsExample
init s3 client
func main()  {
	var key, secret, token, endpoint string
	cfg, err := config.LoadDefaultConfig(context.TODO(),
		config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(key, secret, token)),
		config.WithEndpointResolverWithOptions(aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
			return aws.Endpoint{
				URL: endpoint,
			}, nil
		})),
	)
	if err != nil {
		log.Fatalf("unable to load SDK config, %v", err)
	}
	client := s3.NewFromConfig(cfg)
}create bucket and put object
var (
    bucket = "bucketname"
    objectKey = "object/key"
)
_ , err = client.CreateBucket(context.TODO(), &s3.CreateBucketInput{
    Bucket: &bucket,
})
if err != nil {
    log.Fatalf("unable CreateBucket %s, %v", bucket, err)
}
f, err := os.Open("/tmp/dat")
info, err := f.Stat()
if err != nil {
    log.Fatalf("unable stat file,  %v",  err)
}
// putobject
_, err = client.PutObject(context.TODO(), &s3.PutObjectInput{
    Bucket: &bucket,
    Key: &objectKey,
    Body: f,
    ContentLength: info.Size(),
})
if err != nil {
    log.Fatalf("unable put object: , %v", err)
}
ff, err := os.Open("/tmp/dat")
finfo, err := ff.Stat()
if err != nil {
    log.Fatalf("unable stat file, %v", err)
}
// multipart upload
uploader := manager.NewUploader(client, func(u *manager.Uploader) {
    u.PartSize = 16 * 1024 * 1024 // 16MB per part
})
_, err = uploader.Upload(context.TODO(),&s3.PutObjectInput{
    Bucket: &bucket,
    Key: &objectKey,
    Body: ff,
    ContentLength: finfo.Size(),
})list buckets and list objects
listBucketOutPut, err := client.ListBuckets(context.TODO(), &s3.ListBucketsInput{})
if err != nil {
    log.Fatalf("unable ListBuckets: , %v", err)
}
    //listObjectV2
listObjectsV2Output, err := client.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{
    Bucket: &bucket,
})
if err != nil {
    log.Fatalf("unable listObjectsV2: , %v", err)
}
fmt.Println(listObjectsV2Output)Get ipfs hash and arweave hash
var (
    bucket = "bucketname"
    objectKey = "objectkey"
)
object, err := client.HeadObject(context.Background(), &s3.HeadObjectInput{
    Bucket: &bucket,
    Key:    &objectKey,
})
if err != nil {
    return
}
if err != nil {
    panic(err)
}
fmt.Println("ipfs cid:", object.Metadata["ipfs-hash"])
// if synced to arweave
fmt.Println("arweave hash:", object.Metadata["arweave-hash"])Last updated
