QT + QSsh 文件上传及下载

环境

Qt 5.4.2
QSsh

功能

使用QSsh 实现文件上传及下载

源码

1.下载,编译QSsh,新建QT工程,引用QSsh库
注:示例程序中QSsh库仅适用于Qt 5.4.2,QT其它版本请重新编译QSsh库
在这里插入图片描述
2.mainwindow.h 源码

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
private:
    QSsh::SshConnectionParameters argParameters;
    QSsh::SshConnection *pSshSocket;
    QSharedPointer<QSsh::SftpChannel> sftp;
private slots:
    void slotConnected();
    void slotSshConnectError(QSsh::SshError);

    void uploadFile();
    void onChannelError(QString message);
    void onDownLoadfinished(QSsh::SftpJobId, QString);
private slots:
    void on_pushButton_connect_clicked();
    void on_pushButton_Trans_clicked();
    void on_pushButton_Load_clicked();
private:
    Ui::MainWindow *ui;
};

3.mainwindow.cpp 源码

void MainWindow::slotConnected()
{
   ui->statusBar->showMessage("Connected !");
   sftp = pSshSocket->createSftpChannel();

   if(sftp)
   {
       connect(sftp.data(), SIGNAL(initialized()),SLOT(uploadFile()));
       connect(sftp.data(), SIGNAL(initializationFailed(QString)), SLOT(onChannelError(QString)));
       connect(sftp.data(), SIGNAL(finished(QSsh::SftpJobId, QString)), SLOT(onDownLoadfinished(QSsh::SftpJobId, QString)));
       sftp.data()->initialize();
   }
}

void MainWindow::slotSshConnectError(QSsh::SshError)
{}

void MainWindow::uploadFile()
{
    ui->pushButton_Load->setEnabled(true);
    ui->pushButton_Trans->setEnabled(true);
    ui->pushButton_connect->setEnabled(false);
}

void MainWindow::onChannelError(QString message)
{
   ui->pushButton_Load->setEnabled(false);
   ui->pushButton_Trans->setEnabled(false);
}
void MainWindow::onDownLoadfinished(QSsh::SftpJobId, QString)
{
   ui->statusBar->showMessage("文件传输完成!");
}

void MainWindow::on_pushButton_connect_clicked()
{
    argParameters.port = ui->lineEdit_Port->text().toInt();
    argParameters.userName = ui->lineEdit_Usr->text();
    argParameters.password = ui->lineEdit_Pwd->text();
    argParameters.host = ui->lineEdit_Host->text();
    argParameters.timeout = 10;
    argParameters.authenticationType =
    QSsh::SshConnectionParameters::AuthenticationTypePassword; //密码方式连接
    if(NULL == pSshSocket)
    {
       pSshSocket = new QSsh::SshConnection(argParameters);
       connect(pSshSocket,SIGNAL(connected()),SLOT(slotConnected()));
       connect(pSshSocket,SIGNAL(error(QSsh::SshError)),SLOT(slotSshConnectError(QSsh::SshError)));
    }

    pSshSocket->connectToHost();
}

void MainWindow::on_pushButton_Trans_clicked()
{
    QString localFilePath = ui->lineEdit_LocalFile->text();
    QString remoteFilePath = ui->lineEdit_RemoteFile->text();
    sftp.data()->uploadFile(localFilePath,remoteFilePath,QSsh::SftpOverwriteExisting);
}
void MainWindow::on_pushButton_Load_clicked()
{
    QString localFilePath = ui->lineEdit_LocalFile->text();
    QString remoteFilePath = ui->lineEdit_RemoteFile->text();
    sftp.data()->downloadFile(remoteFilePath,localFilePath,QSsh::SftpOverwriteExisting);

}

运行

运行结果如下:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值