Qt QFtp客户端实现上传下载文件

目录
  • 1.简介
  • 2.用到的主要类
    • 2.1QNetworkReply
    • 2.2QNetworkRequest
  • 3.示例
    • 3.1本地搭建一个FTP服务器。
    • 3.2示例

1.简介

实现FTP客户端有几种方式。

  • Qt4 QFtp类
  • Qt5 QNetworkAccessManager类

QNetworkAccessManager支持大多数的网络协议,比如http、ftp等,这里主要讲解QNetworkAccessManager实现的FTP客户端。

需要添加 Qt += network 模块。

2.用到的主要类

2.1QNetworkReply

QNetworkReply类包含使用QNetworkAccessManager发送的请求的数据和头部。与QNetworkRequest类似,它包含一个URL和标题(包括解析的和原始的形式),一些关于应答状态和应答本身内容的信息。

常用信号:

void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) 下载进度信号
void error(QNetworkReply::NetworkError code) 有错误发生发出信号
void finished() 结束
void readyRead() 有数据来时会发出信号

2.2QNetworkRequest

QNetworkRequest类持有一个要用QNetworkAccessManager发送的请求,QNetworkRequest是网络访问API的一部分,是保存通过网络发送请求所需信息的类。它包含一个URL和一些可用于修改请求的辅助信息。

常用方法:

void setUrl(const QUrl &url) 设置url
void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue) 设置头部

2.3QNetworkAccessManager

常用方法:

QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data) 将数据内容上载到目标请求
QNetworkReply *get(const QNetworkRequest &request) 发布一个请求以获取目标请求的内容

3.示例

3.1本地搭建一个FTP服务器。

快速搭建一个本地的FTP服务器

3.2示例

我按3.1中搭建好ftp服务器。

下载代码:

首先弹出一个文件保存对话框,我在ftpserver中提前放好了一个data.txt的文件,然后设置QURL,设置用户名,密码,端口,采用get方法。有数据来后会收到readyRead信号,然后往文件中写入数据就行了。

void WFtp::on_btnDownLoad_clicked()
{
    //选择一个保存路径
    //设置打开路径
    QString filePath = "F://";

    //对话框标题
    QString dlgTitle="保存文件";

    //文件过滤器
    QString filter="文本文件(*.txt)";

    //打开对话框
    QString fileName=QFileDialog::getSaveFileName(this,dlgTitle,filePath,filter);

    g_file.setFileName(fileName);
    g_file.open(QIODevice::WriteOnly);

    QString str = ui->lineEdit->text() + "data.txt";
    QUrl url(str);

    url.setPort(21);

    url.setUserName(ui->leUser->text());
    url.setPassword(ui->lePasswd->text());

    QNetworkRequest request(url);
    m_reply = m_accessManager->get(request);

    connect(m_accessManager, &QNetworkAccessManager::finished, this, &WFtp::slotReplyFinished);

    connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(slotError(QNetworkReply::NetworkError)));
    connect(m_reply, &QNetworkReply::downloadProgress, this, &WFtp::slotDownloadProgress);
    connect(m_reply, &QNetworkReply::readyRead, this, &WFtp::slotRead);
}

void WFtp::slotRead()
{
    g_file.write(m_reply->readAll());
}

上传代码:

首先弹出一个文件选择对话框,选择要上传的文件,读取文件的数据到byte变量中,设置传入到ftp sever中的文件名叫upLoad.txt,最后使用put方式上传文件。

    //选择一个保存路径
    //设置打开路径
    QString filePath = "F://";

    //对话框标题
    QString dlgTitle="保存文件";

    //文件过滤器
    QString filter="文本文件(*.txt)";

    //打开对话框
    QString fileName=QFileDialog::getOpenFileName(this,dlgTitle,filePath,filter);

    g_file.setFileName(fileName);
    g_file.open(QIODevice::ReadOnly);

    QByteArray byte = g_file.readAll();

    g_file.close();

    QString str = ui->lineEdit->text() + "upLoad.txt";
    QUrl url(str);

    url.setPort(21);
    url.setUserName(ui->leUser->text());
    url.setPassword(ui->lePasswd->text());

    QNetworkRequest request(url);
    m_reply = m_accessManager->put(request,byte);

    connect(m_accessManager, &QNetworkAccessManager::finished, this, &WFtp::slotReplyFinished);
    connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(slotError(QNetworkReply::NetworkError)));
    connect(m_reply, &QNetworkReply::downloadProgress, this, &WFtp::slotDownloadProgress);

上传成功

到此这篇关于Qt QFtp客户端实现上传下载文件的文章就介绍到这了,更多相关Qt QFtp上传下载内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • QT5编译使用QFtp的方法步骤

    背景 使用 QNetworkAccessManager 可以实现 Ftp 的上传/下载功能,但它没有提供例如list.cd.remove.mkdir.rmdir.rename 等功能.这种情况下,我们可以使用QFtp,需要下载源码.编译并处理一些坑. 下载 从 GitHub 下载 QFtp: https://github.com/qt/qtftp 编译 修改 qftp/qftp.pro,删除最后一行,module_qtftp_tests.不然编译会有错误,这个是测试子项目,暂时去除,先编译使用.

  • Qt QFtp客户端实现上传下载文件

    目录 1.简介 2.用到的主要类 2.1QNetworkReply 2.2QNetworkRequest 3.示例 3.1本地搭建一个FTP服务器. 3.2示例 1.简介 实现FTP客户端有几种方式. Qt4 QFtp类 Qt5 QNetworkAccessManager类 QNetworkAccessManager支持大多数的网络协议,比如http.ftp等,这里主要讲解QNetworkAccessManager实现的FTP客户端. 需要添加 Qt += network 模块. 2.用到的主要

  • Java fastdfs客户端实现上传下载文件

    一.项目结构 二.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.

  • 基于Java写minio客户端实现上传下载文件

    前言: 确保已经安装了minio的服务端 代码: pom.xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.0.2</version> </dependency> application.yml server: port:90 minio: url: http://10.69.94.140

  • Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or

  • JAVA技术实现上传下载文件到FTP服务器(完整)

    具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

  • python实现支持目录FTP上传下载文件的方法

    本文实例讲述了python实现支持目录FTP上传下载文件的方法.分享给大家供大家参考.具体如下: 该程序支持ftp上传下载文件和目录.适用于windows和linux平台. #!/usr/bin/env python # -*- coding: utf-8 -*- import ftplib import os import sys class FTPSync(object): conn = ftplib.FTP() def __init__(self,host,port=21): self.c

  • 使用smartupload组件实现jsp+jdbc上传下载文件实例解析

    SmartUpload组件只有5个分别是:File.Files.Request.SmartUpload.SmartUploadException类,其中,File代表用户上传的文件,Files代表用户上传的多个文件,Request相当于HttpServletRequest的功能,用于获取表单数据,SmartUpload是最核心的类,负责文件上传下载,SmartUploadException是自定义异常.    SmartUpload的基本使用思路如下: jsp前台代码表单提交 <form act

  • python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exempt @require_http_methods(["POST"]) def uploadFiles(request): try: user = request.session.get('user') allFimeNames = "" #获取所有上传文件 files

  • python实现的简单FTP上传下载文件实例

    本文实例讲述了python实现的简单FTP上传下载文件的方法.分享给大家供大家参考.具体如下: python本身自带一个FTP模块,可以实现上传下载的函数功能. #!/usr/bin/env python # -*- coding: utf-8 -*- from ftplib import FTP def ftp_up(filename = "20120904.rar"): ftp=FTP() ftp.set_debuglevel(2) #打开调试级别2,显示详细信息;0为关闭调试信息

  • java webservice上传下载文件代码分享

    本文实例为大家分享了java webservice上传下载文件代码,供大家参考,具体内容如下 1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Date; import java.text.Simple

随机推荐