Дерево каталогов и список файлов для FTP сервера
Делаю FTP client на PyQt5, python. И мне надо сделать дерево каталогов и список файлов для FTP сервера. Как делать с локалкой я разобрался. А как сделать на удаленном сервере не понимаю. Просьба помочь:)
import sys
import ftplib
import easygui
import os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QGraphicsOpacityEffect
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMenuBar, QFileSystemModel
from PyQt5.QtCore import QUrl, QRect, QFileInfo
from PyQt5.QtGui import QIcon
# msg = "Введите информацию о сервере"
# fieldNames = ["IP Сервера", "Логин", "Пароль"]
# title = 'FTP'
# ftp_log = easygui.multpasswordbox(msg, title, fieldNames)
ftp = ftplib.FTP('192.168.0.1', 'Artem', '1204')
# ftp.cwd('/disk1_1')
class App(QWidget):
def __init__(self):
super().__init__()
self.grid = QGridLayout(self)
self.menubar = QMenuBar(self)
self.file = self.menubar.addMenu('&file')
self.exitAction = QAction(QIcon('cross-exit.ico'), '&Exit', self)
self.exitAction.setShortcut('Ctrl+Q')
self.exitAction.setStatusTip('Exit application')
self.exitAction.triggered.connect(self.close)
self.file.addAction(self.exitAction)
self.server = self.menubar.addMenu('&server')
self.connectAction = QAction(QIcon('cross-exit.ico'), '&Connect', self)
self.exitAction.setStatusTip('Connect server')
self.server.addAction(self.connectAction)
self.ftp_lst()
self.a = None
self.model = QFileSystemModel(self)
self.model.setRootPath('')
self.tree = QtWidgets.QTreeView()
self.tree.setModel(self.model)
self.tree.setAnimated(False)
self.tree.setIndentation(20)
self.tree.setSortingEnabled(True)
self.grid.addWidget(self.tree, 111, 0, alignment=QtCore.Qt.AlignBottom)
def ftp_lst(self):
self.file_lst = ftp.nlst()
self.len_file_lst = len(ftp.nlst())
self.setLayout(self.grid)
positions = [(i,j) for i in range(self.len_file_lst) for j in range(1)]
for position, name in zip(positions, self.file_lst):
if name == '':
continue
self.button = QPushButton(name)
self.grid.addWidget(self.button, *position)
self.button.clicked.connect(self.on_click)
def update(self):
self.ftp_lst()
def on_click(self):
a = self.sender()
b = f'{ftp.pwd()}/{a.text()}'
c = QUrl(b).fileName()
print(ftp.pwd())
print(QFileInfo(c).completeSuffix())
if QFileInfo(c).completeSuffix() == '':
ftp.cwd(b)
self.update()
else:
way = easygui.diropenbox()
host_file = os.path.join(
way, a.text()
)
try:
with open(host_file, 'wb') as local_file:
ftp.retrbinary('RETR ' + a.text(), local_file.write)
except ftplib.error_perm:
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
ex.resize(640, 480)
ex.show()
sys.exit(app.exec_())```