封装QNetworkAccessManager实现Ftp的上传
来源:互联网 发布:游戏服务器数据持久化 编辑:程序博客网 时间:2024/05/16 18:52
封装QNetworkAccessManager实现Ftp的上传
效果:
头文件:
#ifndef FTPMANAGER_H#define FTPMANAGER_H/*** @brief Ftp文件上传,支持大文件* @author HAN* @date 2017-11-8*/#include <QString>#include <QDebug>#include <QUrl>#include <QNetworkAccessManager>#include <QFile>#include <QByteArray>#include <QUrl>#include <QNetworkRequest>#include <QNetworkReply>class FtpManager{public: FtpManager(QString rftpUsesrname,QString rftpUserPwd,QString rftpIP,int rftpPort = 21); //账号登录 QString uploadFile(QString path_fileName,QString ftpFileName); QNetworkReply *getRelay();private: QFile *sourceFile; QByteArray by_txt; QNetworkAccessManager *manager; QUrl *ftpUrl; QString ftpIP; QString ftpUsesrname; int ftpPort; QString ftpUserPwd; QNetworkReply *replyOrg;};#endif // FTPMANAGER_H
cpp:
#include "ftpmanager.h"#include <QException>/*** @brief 账号登录,初始化* @author HAN* @date 2017-11-8*/FtpManager::FtpManager(QString rftpUsesrname,QString rftpUserPwd,QString rftpIP,int rftpPort){ ftpIP = rftpIP; ftpUsesrname = rftpUsesrname; ftpPort = rftpPort; ftpUserPwd = rftpUserPwd;}/*** @brief 利用QNetworkAccessManager上传文件到ftp* @author HAN* @date 2017-11-8* @param fileName 上传的文件,包含路径* @param ftpFileName 服务器上的路径* @return*/QString FtpManager::uploadFile(QString path_fileName,QString ftpFileName){ if(ftpIP == "") { return "请设置ftp服务器信息"; } try{ sourceFile = new QFile(path_fileName); //设置文件路径 sourceFile->open(QIODevice::ReadOnly); //读取模式 //by_txt=sourceFile->readAll(); //全部读取,遇到大文件时会内存溢出 //sourceFile->close(); //关闭文件 manager = new QNetworkAccessManager; ftpUrl = new QUrl(); //设置QUrl数据 ftpUrl->setScheme("ftp"); //设置URL的类型(或协议) ftpUrl->setHost(ftpIP); //设置主机地址 ftpUrl->setPort(ftpPort); //端口 ftpUrl->setUserName(ftpUsesrname); //ftp用户名 ftpUrl->setPassword(ftpUserPwd); //ftp密码 ftpUrl->setPath(ftpFileName);//设置路径+文件名,这里为ftp根目录 replyOrg = manager->put(QNetworkRequest(*ftpUrl), sourceFile); //上传 }catch(QException e) { return "错误:"+QString(e.what()); } return "success";}/*** @brief 获取上传得到的QNetworkReply,用于进度条显示、获取上传结果等* @date 2017/12/15* @param han* @return void*/QNetworkReply *FtpManager::getRelay(){ return replyOrg;}
用法:
FtpManager *ftp = new FtpManager(FtpNumber,FtpPwd,FtpServerIP); ftp->uploadFile(path,fileName); //上传测试文件 reply = ftp->getRelay(); //获取 connect(reply, SIGNAL(finished()), this, SLOT(OnFinishRelay())); connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(upLoadError(QNetworkReply::NetworkError))); connect(reply, SIGNAL(uploadProgress(qint64 ,qint64)),this,SLOT(OnUploadProgress(qint64,qint64))); p, li { white-space: pre-wrap; }
槽函数
/*** @brief 显示上传进度条* @date 2017/12/15* @param han* @return void*/void OnUploadProgress(qint64 bytesSent, qint64 bytesTotal){ ui->uploadProgressBar->setValue(bytesSent*1.0/bytesTotal*100);}/*** @brief 上传错误* @date 2017/12/15* @param han* @return void*/void upLoadError(QNetworkReply::NetworkError errorCode){}/*** @brief 发送结果回调函数* @date 2017/12/15* @param han* @return void*/void OnFinishRelay(){ if(reply->error() == QNetworkReply::NoError) { //成功 } else { //错误 } reply->deleteLater();}
阅读全文
0 0
- 封装QNetworkAccessManager实现Ftp的上传
- 解决QNetworkAccessManager实现ftp功能后,不能上传大于1G文件的问题
- QNetworkAccessManager 实现FTP上传功能,解决 文件名是中文,QUrl含有中文路径 不能上传的问题
- 原 QNetworkAccessManager实现curl上传表单文件
- Ftp文件上传的实现
- 封装Ftp API函数,实现上传,下载文件,创建目录
- 封装Ftp API函数,实现上传,下载文件,创建目录
- 采用FTP协议实现文件的上传
- java实现的ftp文件上传例题
- VB.Net实现Ftp上传的方法
- java实现ftp的上传和下载
- java实现的ftp文件上传例题
- php实现ftp上传功能的类
- FTP上传功能的客户端实现
- 实现FTP的文件上传与下载
- java实现FTP的上传及下载
- c++ 实现FTP的上传和下载
- ftp实现文件的上传和下载
- 学习Redis集群笔记
- 构建基本的脚本
- LeetCode小白菜笔记[5]:Longest Common Prefix
- 机器学习之支持向量机
- 机器学习算法之 KNN k邻近算法
- 封装QNetworkAccessManager实现Ftp的上传
- ajax分页封装为jquery插件
- Retrofit2+okhttp3获取网络数据
- Mybatis 数据库物理分页 PageHelper的使用教程
- Postgresql 随机生成测试数据sql
- 机器学习之支持向量机SVM Support Vector Machine (一) 线性SVM模型与软硬间隔
- tarjan算法缩点&&求强连通分量【转载】
- 百分点集团发布中国首个行业AI决策系统产品Deep Matrix
- 阿里级别的优化