Tips: S3にあるPDFをブラウザーで開く
S3にアップロードしたPDFをブラウザーで開きたいケースがあると思いますが、ダウンロードされてしまった事はありませんか?
今回はS3にあるPDFをブラウザーで開く方法を記載します。
アップロード方法
PythonでS3にファイルをアップロードするには次のように記載します。
import mimetypes
import boto3
s3_client = boto3.resource('s3')
obj = s3_client.Object('BucketName', path)
content_type = mimetypes.guess_type(os.path.basename('path_to_pdf'))
if len(content_type) > 0:
content_type = content_type[0]
result = obj.put(Body=file_data, ContentType=content_type)
else:
result = obj.put(Body=file_data)
ポイント
ポイントはアップロードする際に ContentType
を指定していることです。
Content-Typeを指定しないと binary/octet-stream
がセットされます。
Content-Typeを指定すると 拡張子から推測した ContentType
がセットされます。.pdf
の場合は application/pdf
がセットされます。
PDFのファイル名を指定するには?
署名付きURLを取得してPDFを開く場合、PDFのファイル名を指定することが可能です。
PDFをブラウザーで開いた際PDFのファイル名をS3にアップロードしたファイル名とは別の名前にしたい場合は以下のようにURLを取得します。
import boto3
import urllib.parse
options = {
'ResponseContentType': 'application/pdf',
'ResponseContentDisposition': 'inline; filename="{}.pdf"'.format(urllib.parse.quote('PDFのファイル名'))
}
params = {
'Bucket': 'BucketName',
'Key': 's3_path/file_name.pdf',
}
if options is not None:
params.update(options)
s3_client = boto3.client('s3')
url = s3_client.generate_presigned_url(
ClientMethod='get_object',
Params=params,
ExpiresIn=10,
HttpMethod='GET',
)