dominicbri7
dominicbri7

Reputation: 2599

Force S3 PDF to be viewed in browser instead of download

So you can force a download by using Content-Disposition: attachment

Content-Disposition: inline is the default and should display in the browser, and it does in fact work with most files like PNG, JPG, etc.

But for some reason somehow when generating a presigned URL from S3, PDF files will always force download even if I don't use the content-disposition: attachment header.

I want to be able to make the PDF open in the browser when the browser allows it

I am using the presigned URL generate call from S3 client http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLJavaSDK.html

Upvotes: 27

Views: 46135

Answers (5)

Salik Mohammad
Salik Mohammad

Reputation: 341

For those who are likely to make camel casing mistakes very often. Please check the Camel casing of the ContentType and ContentDisposition.

enter image description here

enter image description here

Upvotes: 1

Eldho T Kuriakose
Eldho T Kuriakose

Reputation: 104

You have to set your putObject params as follows to view pdf instead of download.

 params = {
        Bucket: process.env.S3_BUCKET,
        Key: <fileName>,
        Body: <fileContent>,
        ContentDisposition:"inline",
        ContentType:"application/pdf"
    };

Upvotes: 7

Sai
Sai

Reputation: 309

You need to provide both these meta data inorder to view the file instead of download:

Content-Disposition: attachment
Content-Type: application/pdf

Upvotes: 0

Kush Vyas
Kush Vyas

Reputation: 6109

Check you file's metadata and remove Content-Disposition entry from that file. and set content type according to the file type.

Like for text file Content-Type='text/plain'

image png Content-Type='image/png'

pdf Content-Type=application/pdf

pdfxml Content-Type=application/vnd.adobe.pdfxml

If your file's Content-Type is binary/octet-stream then it will download instead of display.

Thanks

Upvotes: 46

Mark B
Mark B

Reputation: 201138

You also need to set the Content-Type correctly. The browser will check the content-type value, and if it isn't something it knows how to display it will always just download the file.

Upvotes: 2

Related Questions