そのためのアプリがあります:-)
https://github.com/jezdez/django-queued-storage
「ローカル」ストレージと「リモート」ストレージを設定できるため、まさに必要なことを実行できます。このアプリはファイルを高速な「ローカル」ストレージ (MogileFS ストレージなど) に保存し、Celery (django-celery) を使用して「リモート」ストレージへの非同期アップロードを試みます。
いくつかのコメント:
注意が必要なのは、アップロード後にローカル ファイルを削除する戦略をコピーしてアップロードするか、アップロードして削除するように設定できることです。
2 番目のトリッキーなこと - アップロードされない限り、「ローカル」ストレージからファイルを提供します。
また、アップロードの失敗時に再試行回数を設定することもできます。
インストールと使用法も非常にシンプルで簡単です。
pip install django-queued-storage
に追加INSTALLED_APPS
:
INSTALLED_APPS += ('queued_storage',)
でmodels.py
:
from queued_storage.backends import QueuedStorage
queued_s3storage = QueuedStorage(
'django.core.files.storage.FileSystemStorage',
'storages.backends.s3boto.S3BotoStorage', task='queued_storage.tasks.TransferAndDelete')
class MyModel(models.Model):
my_file = models.FileField(upload_to='files', storage=queued_s3storage)