djangoで日本語名でファイルをダウンロードする方法

Djangoで日本語名のファイルをダウンロードさせるためには、そのためのレスポンスヘッダを適切に設定する必要があります。以下は、その基本的な手順です。

from django.http import FileResponse
from urllib.parse import quote

def download_file(request):
    filepath = '/path/to/yourfile'  # ファイルパス
    filename = '日本語名ファイル名'  # ファイル名

    # FileResponseを作成
    response = FileResponse(open(filepath, 'rb'))

    # Content-Typeを設定
    response['Content-Type'] = 'application/octet-stream'

    # Content-Dispositionを設定(ここで日本語ファイル名を設定)
    response['Content-Disposition'] = 'attachment; filename*=UTF-8\'\'{}'.format(quote(filename.encode('utf-8')))

    return response

このコードは、指定したファイルパスのファイルをダウンロードさせるDjangoビューを示しています。Content-Dispositionヘッダは、ブラウザにファイルのダウンロードと、その際のファイル名を指示します。

このコードでは、ファイル名をUTF-8でエンコードし、その後URLエンコード(quote関数を使用)しています。これにより、日本語のファイル名でも正しく処理できます。

注意点として、このコードはファイルを一度に全て読み込むため、非常に大きなファイルをダウンロードする際にはメモリを大量に消費する可能性があります。大きなファイルを扱う場合にはストリーミングを検討してください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です