@emeraldsinner

Как получить доступ по ftp в Python?

Всем привет, работаю с xml парсером на python/django. Появилась необходимось открывать изображения и сохранять их, доступ есть только по ftp, по http все работает, по ftp не могу разобратся с библиотекой. Есть имя пользователя, пароль и хост, куда их вписать не сильно понимаю.
Сохранение изображения в модели:
class sa_web_images(models.Model):
	web_image = models.ImageField(
		upload_to="photos/", verbose_name="Web фото")
	web_image_url = models.URLField(editable=False)
	web_item = models.ForeignKey('sale_apartment', 
		related_name='web_images')
	non_repeat = models.CharField(max_length=255, unique = True, blank=True, editable=False)
	def get_remote_image(self):
		ftplib.FTP('ftp.host', 'user', 'pass')
		if self.web_image_url and not self.web_image:
			result = urllib.urlretrieve(self.web_image_url)
			self.web_image.save(
				os.path.basename(self.web_image_url),
				File(open(result[0]))
				)
			self.save()
	class Meta:
		verbose_name = "Web фото"
		verbose_name_plural = "Web фото"

Вызов метода:
q=sa_web_images.objects.create(
    web_image_url=iphoto, 
    web_item_id=wi_id,
    non_repeat=non_repeat
    )
q.get_remote_image()
  • Вопрос задан
  • 3416 просмотров
Пригласить эксперта
Ответы на вопрос 1
winordie
@winordie
Лучшая документация -- исходники
from ftplib import FTP

def download_img(file, folder):
        if ftp_online():
                ftpConnect = FTP()
                ftpConnect.connect(server_ftp, port_ftp)
                ftpConnect.login(login_ftp, pass_ftp)
                ftpConnect.cwd('/folder_on_ftp/Images/%s' % folder)
                #st = ftpConnect.pwd()
                return copy_file(ftpConnect, file, folder)

def ftp_online():
    ftpConnect = FTP()
    try:
        ftpConnect.connect(server_ftp, port_ftp)
        ftpConnect.login(login_ftp, pass_ftp)
        ftpConnect.quit()
        ftpConnect.close()
        enable = True
    except:
        enable = False
    return enable

def copy_file(ftp, path, folder):  # ftp - через что соединяемся, path - абсолютный путь до передаваемого файла
    name_file = path
    try:
        send_file = open('/tmp/%s' % name_file, 'rb')
        ftp.storbinary('STOR ' + name_file, send_file, 1024)
        send_file.close()
    except IOError as err:
        print(err)
        return 'noimage.jpg'
    return name_file


download_img(image.gif, folder_on_ftp_for_image)


Как пример
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы