# Django 5.2.8 ドキュメント

# ファイルストレージ API

## デフォルトのストレージクラスの取得

Djangoでは、デフォルトストレージクラスにアクセスするための便利な方法を提供しています。

storages

  `STORAGES` で定義されたエイリアスを使用してストレージインスタンスを取得できる、辞書ライクなオブジェクトです。

  `storages` には `backends` 属性があり、これはデフォルトで `STORAGES` で提供された生の値に設定されます。

  さらに、`storages` は `create_storage()` メソッドを提供しており、このメソッドはバックエンドのために `STORAGES` で使用された辞書を受け取り、そのバックエンド定義に基づいたストレージインスタンスを返します。これは、テストでストレージをインスタンス化する必要があるサードパーティパッケージにとって便利です：

      >>> from django.core.files.storage import storages
      >>> storages.backends
      {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
       'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'},
       'custom': {'BACKEND': 'package.storage.CustomStorage'}}
      >>> storage_instance = storages.create_storage({"BACKEND": "package.storage.CustomStorage"})

class DefaultStorage

  `DefaultStorage` は、`STORAGES` で定義された `default` キーによって定義されたデフォルトのストレージシステムへの遅延アクセスを提供します。 `DefaultStorage` は、内部的に `storages` を使用します。

default_storage

  `default_storage` は `DefaultStorage` のインスタンスです。

## `FileSystemStorage` クラス

class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None, allow_overwrite=False)

  `FileSystemStorage` クラスは、ローカルファイルシステム上での基本的なファイルストレージを実装しています。これは `Storage` から継承し、そこで定義されたすべてのパブリックメソッドに対する実装を提供します。

  注釈

  `FileSystemStorage.delete()` メソッドは、指定されたファイル名が存在しない場合に例外を発生させません。

  location

    ファイルを格納するディレクトリの絶対パス。デフォルトは `MEDIA_ROOT` 設定の値です。

  base_url

    この場所に保存されているファイルが提供される URL。デフォルトは `MEDIA_URL` 設定の値です。

  file_permissions_mode

    保存される際にファイルが受け取るファイルシステムの権限。デフォルトは `FILE_UPLOAD_PERMISSIONS` です。

  directory_permissions_mode

    保存された際にそのディレクトリが受け取るファイルシステムの権限。デフォルトは `FILE_UPLOAD_DIRECTORY_PERMISSIONS` です。

  allow_overwrite

    既存のファイルを上書きして新しいファイルを保存することを許可するかどうかを制御するフラグです。デフォルトは `False` です。

  get_created_time(name)

    システムの ctime、つまり `os.path.getctime()` の `datetime` を返します。一部のシステム(例えば Unix)では、これは最後のメタデータ変更の時間ですが、他のシステム(例えば Windows)では、ファイルの作成時間です。

## `InMemoryStorage` クラス

class InMemoryStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)

  `InMemoryStorage` クラスはメモリベースのファイルストレージを実装しています。永続性はありませんが、ディスクアクセスを避けることでテストの高速化に役立ちます。

  location

    ファイルに割り当てられたディレクトリ名の絶対パス。デフォルトは、`MEDIA_ROOT` 設定値を使います。

  base_url

    この場所に保存されているファイルが提供される URL。デフォルトは `MEDIA_URL` 設定の値です。

  file_permissions_mode

    ファイルに割り当てられたファイルシステムの権限は、 `FileSystemStorage` との互換性を提供するために用意されています。デフォルトは `FILE_UPLOAD_PERMISSIONS` です。

  directory_permissions_mode

    ディレクトリに割り当てられたファイルシステムの権限であり、 `FileSystemStorage` との互換性のために提供されます。デフォルトは `FILE_UPLOAD_DIRECTORY_PERMISSIONS` です。

## `Storage` クラス

class Storage

  `Storage` クラスは、ファイルを保存するための標準化された API と、他のすべてのストレージシステムが継承または必要に応じてオーバーライドできる一連のデフォルト動作を提供します。

  注釈

  メソッドが naive な `datetime` オブジェクトを返す場合、実際に使用されるタイムゾーンは `os.environ['TZ']` の現在の値になります。これは通常、Djangoの `TIME_ZONE` から設定されることに注意してください。

  delete(name)

    `name` で参照されるファイルを削除します。対象のストレージシステムで削除がサポートされていない場合は、代わりに `NotImplementedError` を発生させます。

  exists(name)

    指定された名前のファイルがストレージシステム内ですでに存在する場合、`True` を返します。

  get_accessed_time(name)

    ファイルの最終アクセス時刻を `datetime` で返します。最終アクセス時刻を返すことができないストレージシステムの場合は `NotImplementedError` を発生させます。

    `USE_TZ` が `True` の場合、意識的（aware）な `datetime` を返します。それ以外の場合、ローカルタイムゾーンのナイーブ（naive）な `datetime` を返します。

  get_alternative_name(file_root, file_ext)

    `file_root` および `file_ext` パラメータに基づいて代替ファイル名を返します。拡張子の前にアンダースコアとランダムな7文字の英数字文字列がファイル名に追加されます。

  get_available_name(name, max_length=None)

    `name` パラメータに基づいて、ターゲットのストレージシステム上で新しいコンテンツを書き込むために利用可能かつ空いているファイル名を返します。

    `max_length` を指定した場合、ファイル名の長さはその値を超えません。自由な一意のファイル名が見つからない場合、 `SuspiciousFileOperation` 例外が発生します。

    `name` という名前のファイルが既に存在する場合、代替名を取得するために `get_alternative_name()` が呼び出されます。

  get_created_time(name)

    ファイルの作成時間を `datetime` で返します。作成時間を返すことができないストレージシステムの場合、 `NotImplementedError` を発生させます。

    `USE_TZ` が `True` の場合、意識的（aware）な `datetime` を返します。それ以外の場合、ローカルタイムゾーンのナイーブ（naive）な `datetime` を返します。

  get_modified_time(name)

    ファイルの最終更新時間の `datetime` を返します。最終更新時間を返すことができないストレージシステムの場合、 `NotImplementedError` を発生させます。

    `USE_TZ` が `True` の場合、意識的（aware）な `datetime` を返します。それ以外の場合、ローカルタイムゾーンのナイーブ（naive）な `datetime` を返します。

  get_valid_name(name)

    `name` パラメータに基づいて、ターゲットのストレージシステムで使用に適したファイル名を返します。

  generate_filename(filename)

    Validates the `filename` by calling `get_valid_name` and returns a filename to be passed to the `save()` method.

    The `filename` argument may include a path as returned by `FileField.upload_to`. In that case, the path won't be passed to `get_valid_name` but will be prepended back to the resulting name.

    デフォルトの実装では `os.path` 操作を使用しています。この方法があなたのストレージに適していない場合は、このメソッドをオーバーライドしてください。

  listdir(path)

    指定されたパスの内容をリストアップし、2つのリストからなるタプルを返します。最初のアイテムはディレクトリで、2番目のアイテムはファイルです。このようなリストを提供できないストレージシステムでは、代わりに `NotImplementedError` を発生させます。

  open(name, mode='rb')

    `name` で指定されたファイルを開きます。返されるファイルは必ず `File` オブジェクトである保証がありますが、実際にはサブクラスである可能性があります。リモートファイルストレージの場合、読み書きがかなり遅いかもしれないので注意してください。

  path(name)

    ファイルがPythonの標準 `open()` を使って開けるローカルファイルシステムのパス。ローカルファイルシステムからアクセスできないストレージシステムの場合、代わりに `NotImplementedError` を発生させます。

  save(name, content, max_length=None)

    ストレージシステムを使用して新しいファイルを保存します。すでに `name` という名前のファイルが存在する場合、ストレージシステムは一意な名前を得るために必要に応じてファイル名を変更することがあります。保存されたファイルの実際の名前が返されます。

    `max_length` 引数は `get_available_name()` に渡されます。

    `content` 引数は、`django.core.files.File` のインスタンス、または `File` でラップできるファイルライクオブジェクトでなければなりません。

  size(name)

    `name` で参照されるファイルの総サイズ(バイト単位)を返します。ファイルサイズを返せないストレージシステムの場合は、代わりに `NotImplementedError` を発生させます。

  url(name)

    `name` で参照されているファイルの内容にアクセスできるURLを返します。URLによるアクセスをサポートしていないストレージシステムの場合は、代わりに `NotImplementedError` を発生させます。

There are community-maintained solutions too!

Django has a vibrant ecosystem. There are storage backends highlighted on the Community Ecosystem page. The Django Packages Storage Backends grid has even more options for you!