хранить файлы на удаленном сервере Django

У меня есть модель, в которой у меня есть FileField для загрузки некоторых документов. Я сохраняю файлы в свою файловую систему. Я хочу знать, возможно ли сохранить файлы на другом сервере с помощью ftp или другого метода. Например, мой сервер приложений django работает на хосте 192.168.0.1, и я хочу хранить файлы на хосте с IP-адресом 192.168.0.2.

Я могу без проблем получить доступ через ftp к серверу, на котором я хочу хранить файлы.

Модели:

class Documentacion(models.Model):
      id_doc = models.AutoField(primary_key=True)
      id_proceso = models.ForeignKey(Proceso,db_column='id',verbose_name='Proceso')
      tipo_docu = odels.CharField(max_length=100,null=False,blank=False,verbose_name='Tipo Doc.')
      fecha = models.DateField(auto_now = True)
      autor = models.CharField(max_length=50,blank=False,null=False)
      descripcion = models.CharField(max_length=250,blank=True,null=True)
      documento = models.FileField(upload_to='docs/')

Мои настройки МЕДИА:

MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'

person Joseleg    schedule 13.01.2015    source источник


Ответы (1)


Если вы просматриваете документы, FielField #upload_to это только для определения пути к локальной файловой системе.

Одна вещь, которую вы можете сделать, это: позволить пользователю загружать контент в обычном режиме, а затем, когда он у вас есть в вашей файловой системе, запустить процесс для загрузки файла на другой сервер, также известный как ваш ftp-сервер, вы можете использовать ftplib для архивирования.

Возможно, использование Django Storage облегчит вашу работу.

person rscnt    schedule 13.01.2015
comment
Я думал о том же, но когда пользователь пытается загрузить файл, как я могу получить файл с ftp с помощью приложения django. - person Joseleg; 14.01.2015
comment
У вас будет URL-адрес файла, верно? Если это так, это должно быть что-то тривиальное, просто прочитайте файл и получите его по HTTP. Поскольку вы должны писать или использовать расширение FileField или настраиваемое поле, у вас будут такие методы, как File#path или File#url, как в FileField. Опять же, django-хранилища используют FileField, вам просто нужно передать storage=FTPStorage() в качестве параметра для использования FTP, и, поскольку это FileField, у вас есть все методы из него. - person rscnt; 14.01.2015
comment
Хорошо, спасибо, я попробую то, что вы предлагаете. Очень полезно - person Joseleg; 14.01.2015
comment
Ну, это не работает, и документация по хранилищам Django не объясняет внятно, как настроить учетные данные ftp и направление IP. - person Joseleg; 14.01.2015
comment
Установили ли вы: FTP_STORAGE_LOCATION = '[a]ftp://‹user›:‹pass›@‹host›:‹port›/[path]» в файле settings.py? Проверьте исходный код. - person rscnt; 15.01.2015
comment
да, но всегда хранить файлы в папке, указанной в MEDIA_ROOT. И когда я прокомментировал MEDIA_ROOT и в FTP было пусто, но в базе есть запись - person Joseleg; 15.01.2015