2016-08-27 2 views
3

В моем проекте Django пользователи загружают видеофайлы. Первоначально я загружал их непосредственно в хранилище Azure Blob (эквивалентно хранению на Amazon S3). То есть в models.py я имел:Загрузка содержимого Django FileField на удаленный сервер

class Video(models.Model): 
    video_file = models.FileField(upload_to=upload_path, storage=OverwriteStorage()) 

Где OverwriteStorage переопределяет Storage в django.core.files.storage, и по существу, загружает файл на Azure.

Теперь мне нужно загрузить этот файл на отдельный сервер Linux (не тот, который служит для моего веб-приложения Django). На этом отдельном сервере я буду выполнять некоторые операции над видеофайлом (сжатие, изменение формата), а затем я загружу его в Azure Storage, как раньше.

Мой вопрос: учитывая мою цель, как изменить способ загрузки файла в models.py? Иллюстративный пример будет приятным. Я думаю, мне нужно будет изменить FileField.upload_to, но все примеры, которые я видел, указывают, что это только определение пути локальной файловой системы. Более того, я не хочу, чтобы пользователь обычно загружал контент, а затем запускал процесс для загрузки файла на другой сервер. Выполнять это напрямую - это мое предпочтение. Есть идеи?

+0

Вообще говоря, насколько велики эти файлы? – souldeux

+0

@souldeux: на меньшей стороне (например, <20 МБ). –

ответ

1

Я решил аналогичную проблему с S3 Amazon, но концепция должна быть одинаковой.

Во-первых, я использую django-storages и по умолчанию загружаю свои медиафайлы на S3 (django-storages также поддерживает Azure). Затем моя команда настроила монтирование NFS на наших веб-серверах Django с целевого сервера, на который нам иногда приходится писать пользовательские загрузки. Затем мы просто переопределяем django-storages, используя «upload_to» для локального пути, который является монтированием с другого сервера.

Этот ответ имеет быстрый пример того, как настроить общий ресурс NFS с одного сервера на другой: https://superuser.com/questions/300662/how-to-mount-a-folder-from-a-linux-machine-on-another-linux-machine

Есть несколько способов кожи кошки, но это, казалось простым в нашей команде. Удачи!

+0

Спасибо, это выглядит хорошо. Я возьму его за спину. И просто чтобы дать вам хедз-ап на случай, если вы знаете, как сравниваются подходы, я начал изучать это: https://bitbucket.org/david/django-storages/src/1323aca7e7065880046ae0e708172cf68528cace/storages/backends/ftp.py?at = релиз & FileViewer = файл вид по умолчанию –

Смежные вопросы