Мне нужно что-то подобное для одного из моих проектов.
Я написал модуль, который обрабатывает распечатку и чтение файлов на удаленном сервере по SSH.
Разница в том, что он не использует pysftp
, но paramiko
, ноя думаю, он должен выполнить эту работу.
import paramiko
class SSHClient:
__slots__ = ['transport', 'sftp']
def __init__(self, host, user, passw, port):
"""Init connection to SFTP server.
Args:
host (str): Server IP address
user (str): Server username
passw (str): Server password
port (int): connection port
"""
self.transport = paramiko.Transport((host, port))
self.transport.connect(username=user, password=passw)
self.sftp = paramiko.SFTPClient.from_transport(t=self.transport)
def __enter__(self):
return self
def __exit__(self, exception_type, exception_value, traceback):
"""Close SFTP connection"""
self.transport.close()
self.sftp.close()
def list_files(self, remote_path) -> list:
"""List files from specific server directory.
Args:
remote_path (str): SFTP server path directory.
Returns:
list of files & folders in directory.
"""
return self.sftp.listdir(path=remote_path)
def read_remote_file(self, remote_path, filename):
"""Read remote file content from server.
Args:
remote_path (str): SFTP server path.
filename (str): name of file.
"""
return self.sftp.open(
filename='{path}/{file}'.format(path=remote_path, file=filename),
mode='r'
)
def close_conn(self) -> None:
"""Close SFTP connection"""
self.transport.close()
self.sftp.close()
Затем вы можете загрузить файл, используя содержимое, извлеченное с помощью read_remote_file()
, в один из ваших просмотров в приложении Django
.