2015-01-13 4 views
1

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

Я могу без проблем получить доступ через 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/' 

ответ

2

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

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

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

+0

Я думал то же самое, но когда пользователь пытается загрузить файл, как я могу получить файл с ftp с помощью приложения django. – Joseleg

+0

У вас будет URL-адрес файла ?, если так, он должен быть чем-то тривиальным, просто прочитайте файл и получите его по HTTP. Поскольку вы должны писать или использовать расширение FileField или настраиваемое поле, у вас будут методы раскрытия, такие как «File # path» или «File # url», как в FileField. Снова django-хранилища используют FileField, вам просто нужно передать «storage = FTPStorage()» в качестве параметра для использования FTP, и поскольку это FileField, у вас есть все методы из него. – rscnt

+0

Хорошо Спасибо, я попробую то, что вы предлагаете. Очень полезно – Joseleg