Для этого есть приложение: -)
https://github.com/jezdez/django-queued-storage
Он делает именно то, что вам нужно - и многое другое, потому что вы можете установить любое «локальное» хранилище и любое «удаленное» хранилище. Это приложение сохранит ваш файл в быстром «локальном» хранилище (например, хранилище MogileFS), а затем, используя Celery (django-celery), попытается выполнить асинхронную загрузку в «удаленное» хранилище.
Несколько замечаний:
Сложность в том, что вы можете настроить его для копирования и загрузки или для загрузки и удаления стратегии, которая удалит локальный файл после загрузки.
Вторая сложная вещь - он будет обслуживать файл из «локального» хранилища, пока он не будет загружен.
Также можно настроить количество повторных попыток при сбое загрузки.
Установка и использование также очень просты и понятны:
pip install django-queued-storage
добавить к INSTALLED_APPS
:
INSTALLED_APPS += ('queued_storage',)
in 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)