AWS S3 downloading the HTML file instead of serving it

Question:

I’m trying to serve an HTML page after generating it with my code,

so every time I run my code, it will generate a new index.html file. And after that, I have to create a URL for this page like this:

file_name = 'index.html'
fig.write_html('/tmp/' + file_name, auto_play=False)

s3_client = boto3.client('s3')
response = s3_client.upload_file('/tmp/' + file_name, 
 Writing_Bucket_Name, file_name, 
 ExtraArgs={'ACL':'public-read', 'ContentType':'text/html'})



# generate presigned url
print('URL START ')
url = s3_client.generate_presigned_url('get_object',
                                       Params={'Bucket': Writing_Bucket_Name, 
                                                        'Key': 'index.html'},
                                                         ExpiresIn=86400)

The problem is: when I go to this URL, it will download the HTML file instead of serving it

Asked By: Jonathan

||

Answers:

You have to specify which type of response you want to get, in your case :- you have to return an HTML file so that means you need text/html Response

You can do that by adding "ResponseContentType": "text/html" to your Params like this:

url = s3_client.generate_presigned_url('get_object',
                                       Params={                    
                                              'Bucket': Writing_Bucket_Name, 
                                              "ResponseContentType": "text/html", 
                                              'Key': 'index.html'         
                                              },
                                       ExpiresIn=86400)
Answered By: Hisham