Comments (5)
Based on the Java issue you've provided, the way this is done in the Java SDK is actually through generic HTTP request manipulation. This same level of customization is possible in the Go V2 SDK as well through middleware.
The following example demonstrates how to do this:
package main
import (
"context"
"fmt"
"log"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/aws/smithy-go/middleware"
smithyhttp "github.com/aws/smithy-go/transport/http"
)
type withQueryParam struct {
key, value string
}
var _ middleware.SerializeMiddleware = (*withQueryParam)(nil)
func (*withQueryParam) ID() string { return "withQueryParam" }
func (m *withQueryParam) HandleSerialize(
ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler,
) (
out middleware.SerializeOutput, md middleware.Metadata, err error,
) {
req, ok := in.Request.(*smithyhttp.Request)
if !ok {
return out, md, fmt.Errorf("unexpected transport %T", in.Request)
}
// smithyhttp.Request embeds http.Request
req.URL.RawQuery = fmt.Sprintf("%s&%s=%s", req.URL.RawQuery, m.key, m.value)
return next.HandleSerialize(ctx, in)
}
// you don't _need_ to have this but it makes adding the middleware to multiple
// operations much easier
func addWithQueryParam(key, value string) func(*s3.Options) {
return func(o *s3.Options) {
o.APIOptions = append(o.APIOptions, func(s *middleware.Stack) error {
return s.Serialize.Add(&withQueryParam{key, value}, middleware.After)
})
}
}
func main() {
cfg, err := config.LoadDefaultConfig(context.Background())
if err != nil {
log.Fatal(err)
}
svc := s3.NewFromConfig(cfg, func(o *s3.Options) {
o.ClientLogMode = aws.LogRequest
})
svc.GetObject(context.Background(), &s3.GetObjectInput{
Bucket: aws.String("bucket"),
Key: aws.String("key"),
}, addWithQueryParam("foo", "bar"))
}
This is just with GetObject
as an example, you can apply this to any S3 operation using functional options like I've done here.
Please try that and let us know if it works for you.
from aws-sdk-go-v2.
Aside: if this is something the S3 API can do, it should really be part of their API model such that all SDKs pick it up automatically, at which point it would be a field in the request input like any other parameter. Unsure why that's not the case.
Tracking internally: V1320702086
from aws-sdk-go-v2.
This issue is now closed. Comments on closed issues are hard for our team to see.
If you need more assistance, please open a new issue that references this one.
from aws-sdk-go-v2.
S3 select has acknowledged this and created a backlog item to address the modeling defect.
from aws-sdk-go-v2.
from aws-sdk-go-v2.
Related Issues (20)
- Missing json => dynamodbav v2 migration HOT 1
- DynamoDB:UpdateItem ReturnValuesOnConditionCheckFailure flag does not work HOT 5
- Get Filtered Repositories from ECR(short issue description) HOT 2
- S3: False Request and 'Object Not Found' Error When Bucket Name Matches Object Key Prefix and usePathStyle is False HOT 2
- S3: `DeleteObjects` Creates File Versions and Delete Markers Regardless of File Existence with `ObjectLockEnabledForBucket` Set to True HOT 4
- Include imitation of 10 message attributes field for sns.PublishInput in godoc HOT 2
- SSO Cache filename should be based on `sso_session` in addition to `sso_start_url` HOT 4
- PresignedPutObject ignores ChecksumAlgorithm HOT 2
- No paginator for DescribeLockedSnapshots? HOT 2
- [inspector2] GetConfiguration is missing the `ec2Configuration` object HOT 3
- Provide io.Reader wrapper around S3 SelectObjectContentEventStream
- Expand Codebuild to accept the new WebhookFilterType of `WORKFLOW_JOB_QUEUED` HOT 3
- How to set a field to NULL using the Redshift Data API? HOT 2
- Bad request when describe key pairs with empty filters slice HOT 13
- EC2Query empty list serialization behavior is incorrect HOT 1
- S3: intermittent TLS 1.3 handshake failures HOT 2
- Support generic SigV4 and SigV4A signers HOT 1
- package docs for github.com/aws/aws-sdk-go-v2/aws/signer/v4 are malformed HOT 2
- Something changed from version v1.22.2 to v1.26.1 and I can't find what HOT 1
- Add public constant values for Redshift Cluster - ClusterStatus HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aws-sdk-go-v2.