feat: add PresignInlineURL method for inline content display (#97)
## Summary - Add `PresignInlineURL(ctx, key, contentType)` method that generates presigned URLs with `Content-Disposition: inline` and optional `Content-Type` override - Browsers will render content (e.g. PDFs) directly in iframes instead of triggering download dialogs - Existing `PresignURL` remains unchanged ## Context The document-service uses presigned S3 URLs to display PDFs in iframes. Without `Content-Disposition: inline`, the browser triggers a download dialog instead of rendering the PDF. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Reviewed-on: #97
This commit was merged in pull request #97.
This commit is contained in:
@@ -105,6 +105,25 @@ func (s *S3) PresignURL(ctx context.Context, key string) (string, error) {
|
|||||||
return req.URL, nil
|
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
|
// 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
|
// This loads AWS config from the default locations and is suitable for most use cases
|
||||||
func New(bucket string) (*S3, error) {
|
func New(bucket string) (*S3, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user