Loading...

Tips: S3にあるPDFをブラウザーで開く

Technology
Nov 13, 2024

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',
)
Top