diff --git a/s3.go b/s3.go index 0a3a266..e7abdb8 100644 --- a/s3.go +++ b/s3.go @@ -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) {