1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

さくらのCDN(ウェブアクセラレータ)+オブジェクトストレージでHTTPS配信すると、サイト開いた際にダウンロードになる問題の解決

Last updated at Posted at 2024-07-28

発生事象

さくらのCDN(ウェブアクセラレータ)+オブジェクトストレージでHTTPS配信すると、サイトを開いた際にダウンロードとなってサイトがブラウザで開けない

原因

index.htmlのcontent_typeがoctet-streamで配信されているから。
-> さくらのオブジェクトストレージで2024年7月現在Webからアップロードすると、すべてcontent_typeがoctet-streamで登録される。
-> boto3 使って適切にmime/typeを設定してアップロードする必要がある。

この画面からファイルアップロードしたことが原因だった。
スクリーンショット 2024-07-28 20.02.10.png

対策 boto3で適切にmime/typeを設定してアップロードする

まずチェックする

import boto3

# クライアントの設定
client = boto3.client(
    's3',
    endpoint_url="https://s3.isk01.sakurastorage.jp",
    aws_access_key_id='*****',
    aws_secret_access_key='*****',
    region_name='jp-north-1'  # リージョンに合わせて修正
)

# バケット名とオブジェクトキーを設定
bucket_name = '*****'
object_key = 'index.html'

# メタデータの取得
response = client.head_object(Bucket=bucket_name, Key=object_key)

# Content-Typeの表示
print(response)

boto3でMimeType設定してアップロードする

import boto3
import os
import mimetypes

# クライアントの設定
client = boto3.client(
    's3',
    endpoint_url="https://s3.isk01.sakurastorage.jp",
    aws_access_key_id='*****',
    aws_secret_access_key='*****',
    region_name='jp-north-1'  # リージョンに合わせて修正
)

# バケット名とオブジェクトキーを設定
bucket_name = '*****'
directory_path = '../*****/'

# ディレクトリ内の全ファイルをリストアップし、アップロード
for subdir, dirs, files in os.walk(directory_path):
    for file in files:
        if file == '.DS_Store':
            continue  # .DS_Store ファイルはスキップする
        full_path = os.path.join(subdir, file)
        with open(full_path, 'rb') as data:
            mime_type, _ = mimetypes.guess_type(full_path)
            if mime_type is None:
                mime_type = 'application/octet-stream'  # デフォルトの MIME タイプ

            client.put_object(
                Bucket=bucket_name,
                Key=os.path.relpath(full_path, directory_path),
                Body=data,
                ContentType=mime_type
            )

            print(f'Uploaded {file} with MIME type {mime_type}')
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?