Reputation: 2599
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
Reputation: 341
For those who are likely to make camel casing mistakes very often. Please check the Camel casing of the ContentType and ContentDisposition.
Upvotes: 1
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
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
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
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