基于 Qt的 ftp客户端 代码
#ifndef PVFTP_H
#define PVFTP_H
#include "../pvcore_global.h"
#include <QObject>
#include <QFile>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkReply>
#include <QByteArray>
#include <QFileInfo>
#include <QDir>
/*
* FtpCLient client;
client.FtpSetUserInfor("userFtpName", "userFtpPwd");
client.FtpSetHostPort("192.168.1.88",21);
client.FtpPut("C:\\Users\\ZD\\Desktop\\log.txt", "a.txt");
*
*/
class PVCORESHARED_EXPORT FtpCLient:public QObject
{
Q_OBJECT
protected slots:
void finished(QNetworkReply * reply);
public:
FtpCLient(QObject* parent=0);
/**
* @brief 下载文件
* @param sor
* @param dev
*/
void FtpGet(QString sor, QString dev);
/**
* @brief 上传文件
* @param source
* @param dev
*/
void FtpPut(QString source, QString dev);
/**
* @brief 设置用户名 密码
* @param user
* @param pwd
*/
void FtpSetUserInfor(QString user, QString pwd);
/**
* @brief 设置地址
* @param str
* @param port
*/
void FtpSetHostPort(QString str, int port =21);
private:
QFile * m_pFile;
QNetworkReply *m_pReply;
QNetworkAccessManager * m_pManager;
QUrl * m_pUrl;
};
#endif // PVFTP_H
#include "ftp.h"
FtpCLient::FtpCLient(QObject* parent):QObject(parent)
{
m_pManager = new QNetworkAccessManager();
m_pUrl = new QUrl();
m_pUrl->setScheme("ftp");
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();
qDebug()<<"FtpCLient->finished";
}
//设置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)
{
QFile file(source);
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();
m_pUrl->setPath(dev);
m_pReply = m_pManager->put(QNetworkRequest(*m_pUrl), data);
qDebug()<<"FtpPut"<<source<<dev<<m_pReply->errorString()<<m_pReply->error();
}