feat: add PresignInlineURL method for inline content display
storage / test (pull_request) Successful in 1m41s
storage / vulnerabilities (pull_request) Successful in 1m46s
pre-commit / pre-commit (pull_request) Successful in 6m10s

Generates presigned URLs with Content-Disposition: inline and optional
Content-Type override, so browsers render content (e.g. PDFs) directly
instead of triggering a download dialog.
This commit is contained in:
2026-04-16 10:45:23 +02:00
parent cdad7f1f66
commit 4199fc84e7
+19
View File
@@ -105,6 +105,25 @@ func (s *S3) PresignURL(ctx context.Context, key string) (string, error) {
return req.URL, nil
}
// PresignInlineURL generates a presigned URL that tells the browser to display
// the content inline rather than triggering a download. The URL is valid for
// 15 minutes.
func (s *S3) PresignInlineURL(ctx context.Context, key string, contentType string) (string, error) {
input := &s3.GetObjectInput{
Bucket: aws.String(s.bucket),
Key: aws.String(key),
ResponseContentDisposition: aws.String("inline"),
}
if contentType != "" {
input.ResponseContentType = aws.String(contentType)
}
req, err := s.presigner.PresignGetObject(ctx, input, s3.WithPresignExpires(15*time.Minute))
if err != nil {
return "", err
}
return req.URL, nil
}
// New creates a new S3 storage instance using the upload manager
// This loads AWS config from the default locations and is suitable for most use cases
func New(bucket string) (*S3, error) {