头文件ftp.h

#pragma once
#ifdef CREATEDELL_API_DU
#else
#define  CREATEDELL_API_DU  _declspec(dllexport)
#endif#ifndef FTPCLIENT_H#include <QtCore\QString>
#include <QtNetwork\QNetworkAccessManager>
#include <QtNetwork\QNetworkRequest>
#include <QtNetwork\QNetworkReply>
#include <QtCore\QUrl>
#include <QtCore\QFile>
#include <QtCore\QDir>
#include <QtCore\QDebug>
#include <QtCore\QObject>#include <memory>class CREATEDELL_API_DU FtpClient : public QObject
{Q_OBJECTpublic:explicit FtpClient(QObject *parent = 0);virtual ~FtpClient();void setUrl();void setDir(const QString& dirpath);void setFile(QString& filename);void setPort(int port = 21);void setPath(QString& path);void setHost(QString& ip);void setPassword(QString& password);void setUserName(QString& username);void setPercent(qint64 bytesSent, qint64 bytesTotal);QNetworkReply::NetworkError getErrorCode();void FtpClient::setErrorCode(QNetworkReply::NetworkError errors);
public slots:void upload();void download(int& errCode);void readContent();void replyFinished(QNetworkReply*);void loadError(QNetworkReply::NetworkError);void loadProgress(qint64 bytesSent, qint64 bytesTotal);public:virtual void onFinish() {}virtual qint64 getPersent() { return percent_; }private:QNetworkReply *reply_;std::shared_ptr<QFile> file_;std::shared_ptr<QUrl> url_;std::shared_ptr<QDir> dir_;std::shared_ptr<QNetworkAccessManager> accessManager_;qint64 percent_;QNetworkReply::NetworkError error_;
};#endif // FTPCLIENT_H

源文件ftp.cpp

#define CREATEDELL_API_DU _declspec(dllexport)#include "ftp.h"#include <iostream>
#include <QEventLoop>CREATEDELL_API_DU FtpClient::FtpClient(QObject *parent) :QObject(parent), percent_(0){url_ = std::make_shared<QUrl>();url_->setScheme("ftp");
}CREATEDELL_API_DU FtpClient::~FtpClient()
{}QNetworkReply::NetworkError FtpClient::getErrorCode()
{return this->error_;
}void FtpClient::setErrorCode(QNetworkReply::NetworkError errors)
{this->error_ = errors;
}void CREATEDELL_API_DU FtpClient::setDir(const QString& dirPath)
{dir_ = std::make_shared<QDir>(dirPath);if (!dir_->exists()){auto ok = dir_->mkdir(dirPath);if (!ok){qDebug() << "make dir " << dirPath << " failed..." << endl;}}
}
void CREATEDELL_API_DU FtpClient::setUrl()
{url_ = std::make_shared<QUrl>();url_->setScheme("ftp");
}void CREATEDELL_API_DU FtpClient::setFile(QString& fileName)
{file_ = std::make_shared<QFile>(dir_->absolutePath() + "/" + fileName);
}void CREATEDELL_API_DU FtpClient::setPort(int port)
{if (nullptr != url_){url_->setPort(port);}
}void CREATEDELL_API_DU  FtpClient::setPercent(qint64 sendBytes, qint64 totalBytes)
{double result = 100.0 * sendBytes / totalBytes;this->percent_ = (int)result;
}void CREATEDELL_API_DU FtpClient::setPassword(QString& password)
{if (nullptr != url_){url_->setPassword(password);}
}void CREATEDELL_API_DU FtpClient::setUserName(QString& userName)
{if (nullptr != url_){url_->setUserName(userName);}
}void CREATEDELL_API_DU FtpClient::setPath(QString& path)
{url_->setPath(path);
}void CREATEDELL_API_DU FtpClient::setHost(QString& ip)
{url_->setHost(ip);
}void CREATEDELL_API_DU FtpClient::upload()
{qDebug() << "upload file " << *file_ << " begin..." << endl;if (!file_->open(QIODevice::ReadOnly)){qDebug() << "open file " << *file_ << " failed..." << endl;}//创建一个QNetworkAccessManager实例,将accessManager指向它accessManager_ = std::make_shared<QNetworkAccessManager>(this);accessManager_->setNetworkAccessible(QNetworkAccessManager::Accessible);QNetworkRequest request(*url_);reply_ = accessManager_->put(request, file_.get());connect(accessManager_.get(), SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)),Qt::DirectConnection);connect(reply_, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(loadError(QNetworkReply::NetworkError)),Qt::DirectConnection);connect(reply_, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(loadProgress(qint64, qint64)),Qt::DirectConnection);
}void CREATEDELL_API_DU FtpClient::download(int& errCode)
{errCode = 0;qDebug() << "download file " << *file_ << " begin..." << endl;file_->open(QIODevice::WriteOnly);  accessManager_ = std::make_shared<QNetworkAccessManager>(this);accessManager_->setNetworkAccessible(QNetworkAccessManager::Accessible);QNetworkRequest request(*url_);reply_ = accessManager_->get(request);connect(reply_, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error),[=, &errCode](QNetworkReply::NetworkError code){file_->close();switch ((int)code){case QNetworkReply::ConnectionRefusedError:qDebug() << "ConnectionRefusedError";break;case QNetworkReply::HostNotFoundError:qDebug() << "HostNotFoundError";break;case QNetworkReply::TimeoutError:qDebug() << "TimeoutError";break;case QNetworkReply::AuthenticationRequiredError:{qDebug() << "AuthenticationRequiredError";errCode = code;break;}default:{errCode = code;break;}}});connect((QObject *)reply_, SIGNAL(readyRead()), this, SLOT(readContent()));connect((QObject*)(accessManager_.get()), SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)),Qt::DirectConnection);//connect(reply_, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(loadError(QNetworkReply::NetworkError)),Qt::DirectConnection);connect(reply_, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(loadProgress(qint64, qint64)),Qt::DirectConnection);QEventLoop eventloop;connect((QObject*)(accessManager_.get()), SIGNAL(finished(QNetworkReply*)), &eventloop, SLOT(quit()));eventloop.exec(QEventLoop::ExcludeUserInputEvents);
}void CREATEDELL_API_DU FtpClient::readContent()
{file_->write(reply_->readAll());
}void CREATEDELL_API_DU FtpClient::replyFinished(QNetworkReply* replys)
{if (reply_->error() == QNetworkReply::NoError){qDebug() << "end..." << endl;reply_->deleteLater();file_->flush();file_->close();//发送传输完成信号onFinish();}else{//QMessageBox::critical(NULL, tr("Error"), "Failed!!!");qDebug() << "Error Failed!!!" << endl;}
}void CREATEDELL_API_DU FtpClient::loadError(QNetworkReply::NetworkError)
{qDebug() << "Error: " << reply_->error();setErrorCode( reply_->error());
}void CREATEDELL_API_DU FtpClient::loadProgress(qint64 bytesSend, qint64 bytesTotal)
{setPercent(bytesSend, bytesTotal);qDebug() << "loaded" << bytesSend << "of" << bytesTotal << "  " << getPersent() << "%";
}

使用Qt实现FTP客户端相关推荐

  1. QT 实现FTP客户端

    一.简述 本文基于QT5.8使用QNetworkAccessManager类进行利用FTP协议的上传和下载操作,Qt4中使用的QFtp模块在QT5后被移除,如果有需要可以去GitHub上下载编译后使用 ...

  2. Qt4_写FTP客户端

    写FTP客户端 QFtp类在Qt中实现了FTP协议的客户端程序,它提供了非常多的函数来执行多数常见的FTP操作,同时还可以执行任意的FTP指令. QFtp类是异步工作的.若调用一个像get()或者pu ...

  3. linux 影院 ftp客户端20端口号,Linux下的ftp客户端说明文档

    Linux下的ftp客户端说明文档 发布时间:2006-09-24 00:20:41来源:红联作者:userhq l 软件功能: 本程序基于linux下的socket函数,利用ftp 协议,实现lin ...

  4. C/C++、Qt4实现FTP客户端(有无界面版)

    简介 操作系统:Ubuntu 12.04 LTS 开发工具:GNU4.6.3,C/C++标准库,Qt4,Qt Creator Documentation 2.4.1 代码下载:码云:传送门,GitHu ...

  5. Qt之FTP上传/下载文件操作

    一个简单的Ftp客户端文件上传/下载操作示例. 上传文件 QNetworkAccessManager manager; QUrl url; /* 设置通讯协议 */ url.setScheme(&qu ...

  6. 网络编程--ftp客户端的实现(c#版)

    .net2.0对ftp有了一个很好的封装,但是确容易让人忽略ftp的真正内部实现,下面是我实现的ftp客户端的功能,其主要步骤是这样的: 1.创建一个FtpWebRequest对象,指向ftp服务器的 ...

  7. 安装ftp连接linux服务器配置,Linux下FTP安装及配置(VSFTPD服务器安装配置、FTP客户端安装配置)...

    安装说明 安装环境:CentOS-6.3 安装方式:yum安装.rpm源码安装 软件:ftp-0.17-51.1.el6.x86_64.rpm 下载地址:http://pan.baidu.com/s/ ...

  8. ftp 客户端 上传

    ps: 1.使用netkit-ftp-0.17交叉编译出来的ftp客户端, 2.然后写上传代码,调用ftp传服务器: 3.最好使用bin二进制文件形式传输: 4.ftp客户端和Ubuntu自带的ftp ...

  9. 18. 编写FTP客户端程序

    在实际应用中可能经常访问FTP服务器来上传或下载文件,Python也可以替我们做这些. [示例 1]下面请看一个例子(ftpclient). 运行的结果如下: FTP客户端程序的编写还可以参照官方文档 ...

  10. windows ftp服务器_ftp客户端软件,推荐6个流行的FTP客户端软件

    无论你是做网站工作,还是运行一个家庭FTP服务器,或者你只是喜欢高速下载,一个稳定且功能齐全的FTP客户端工具都可以节省你大量时间和生命,现在有大量的免费或者收费的FTP客户端软件供大家选择,这里总结 ...

最新文章

  1. 第三十一讲 非线性微分自治方程组及图解
  2. 3.15曝光“山寨”杀毒软件“杀毒三宗罪”
  3. 阿里云Redis读写分离典型场景:如何轻松搭建电商秒杀系统
  4. java socket编程客户端_Java Socket编程 - 基于Socket实现HTTP下载客户端
  5. 快递送不上门,谁的锅?
  6. shell 并发脚本
  7. Azure SQL作業
  8. tomcat配置项目的接种方式
  9. catia 快捷键 激活零件_CATIA教程:CATIA快捷键及学习技巧总结
  10. matlab和origin的区别,Matlab与Origin的区别
  11. Express访问静态资源(express.static)
  12. 【小程序】快来开发你的第一个微信小游戏(详细流程)
  13. requests下载多张图片
  14. mysql中重复数据的查询
  15. android 测光模式,Android摄像头:设置测光点位置
  16. Phalcon PHP 中文,Phalcon 入门
  17. 程序员增加收入的实用之道
  18. r7 5800x配什么主板和显卡
  19. 艾宾浩斯记忆法和遗忘曲线
  20. (读书笔记)《玩着玩着就能成为PPT高手》——如何制作一个简单易懂的PPT

热门文章

  1. 设置IIS指向另一台机器上的共享目录(动易sw)遇到的问题
  2. 电子计算机第一台视频,1946年2月14日世界上第一台计算机诞生
  3. 知识付费系统源码(开源知识付费系统平台下载)
  4. 宇枫资本理财中要避免这些
  5. 影视搜索播放PHP源码_可对接资源网
  6. Android扩展知识 - 减轻C盘压力,扩大C盘空闲容量
  7. FreeRTOS学习笔记——FreeRTOS 时间管理
  8. 第三阶段应用层——1.5 数码相册—使用FreeType在LCD上显示单个字符
  9. Google Kick Start 2019 C轮 题解
  10. 中国网络游戏界十大雷囧现象