Qt5.X FTP上传与下载

Cliet.h


#ifndef CLIET_H
#define CLIET_H
 
 
#include <QFile>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkReply>
#include <QByteArray>
#include <QMessageBox>
#include <QFileInfo>
#include <QDir>
 
 
class FtpCLient:public QObject
{
    Q_OBJECT
protected slots:
    void finished(QNetworkReply * reply);
public:
    FtpCLient();
    void FtpGet(QString sor, QString dev);
    void FtpPut(QString source, QString dev);
    void FtpSetUserInfor(QString user, QString pwd);
    void FtpSetHostPort(QString str, int port =21);
private:
    QFile * m_pFile;
    QNetworkReply *m_pReply;
    QNetworkAccessManager * m_pManager;
    QUrl * m_pUrl;
 
 
 
 
};
 
 
#endif // CLIET_H
 
 

Cliet.cpp

#include "cliet.h"
 
 
FtpCLient::FtpCLient()
{
    m_pManager = new QNetworkAccessManager();
    m_pUrl = new QUrl();
    m_pUrl->setScheme("ftp");
    m_pUrl->setHost("192.168.0.217");
    connect(m_pManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finished(QNetworkReply *)));
}
 
 
 
 
 
 
 
 
void FtpCLient::finished(QNetworkReply * reply)
{
    m_pFile->write(reply->readAll());
    m_pFile->flush();
    m_pFile->close();
    reply->deleteLater();
}
 
 
 
 
//设置FTP服务器用户名和密码
void FtpCLient::FtpSetUserInfor(QString user, QString pwd)
{
    m_pUrl->setUserName(user);
    m_pUrl->setPassword(pwd);
}
//设置地址和端口
void FtpCLient::FtpSetHostPort(QString str, int port )
{
    m_pUrl->setHost(str);
    m_pUrl->setPort(port);
}
//下载文件
void FtpCLient::FtpGet(QString sor, QString dev)
{
    QFileInfo info;
    info.setFile(dev);
    m_pFile = new QFile(info.filePath());
    m_pFile->open(QIODevice::Append|QIODevice::WriteOnly);
    m_pUrl->setPath(sor);
 
 
    m_pReply = m_pManager->get(QNetworkRequest(*m_pUrl));
}
//上传文件
void FtpCLient::FtpPut(QString source, QString dev)
{
    qDebug()<<"start";
    QFile file(source);
    file.open(QIODevice::ReadOnly);
    QByteArray data = file.readAll();
    qDebug()<<"start1";
 
 
    m_pFile = new QFile(dev);
    m_pFile->open(QIODevice::ReadOnly|QIODevice::WriteOnly);
    m_pUrl->setPath(dev);
    m_pManager->put(QNetworkRequest(*m_pUrl), data);
    qDebug()<<"start2";
}
 
 

调用

void Debugwidget::on_input_clicked()
{
    QString file_path = QFileDialog::getOpenFileName(this,"请选择待导入ENI文件","./","*.xml");
    if(file_path!="")
    {
        QString dev;
        for(int i=file_path.size()-1;i>=0;i--)
        {
            if(file_path[i]=='/')
            {
                dev = file_path.right(file_path.size()-i-1);
                break;
            }
        }
        client.FtpPut(file_path,"ENI/"+dev);
    }
}
 
 
void Debugwidget::on_inputOtherFile_clicked()
{
    QString file_path = QFileDialog::getOpenFileName(this,"请选择待导入其他文件","./","*.xml");
    if(file_path!="")
    {
        QString dev;
        for(int i=file_path.size()-1;i>=0;i--)
        {
            if(file_path[i]=='/')
            {
                dev = file_path.right(file_path.size()-i-1);
                break;
            }
        }
        client.FtpPut(file_path,dev);
    }
}


猜你喜欢

转载自blog.csdn.net/u013288800/article/details/80805088