qt http 上传文件
//Qt文件
QFile file(
"1.jpg"
);
if
(!file.open (QIODevice::ReadOnly)){
qDebug()<<
"file open failed."
;
return
;
}
QByteArray data=file.readAll ();
file.close ();
networkMgr->post (req,
"fileData="
+data.toBase64 ()+
""
);
看服务器支持,如果是http服务器,可用 http post方式上传数据或文件。
二、客户端
客户端比服务器稍微麻烦一些,QT 工程如何建立,这里就不描述了,大致步骤如下:
1)新建一个类 Upload,并定义几个成员:
QNetworkAccessManager *_uploadManager;
QNetworkReply *_reply;
char* m_buf;
2)定义事件槽
void replyFinished( QNetworkReply* );
void upLoadError(QNetworkReply::NetworkError errorCode);
void OnUploadProgress( qint64 bytesSent, qint64 bytesTotal );
3)在构造函数中,加入以下代码:
_uploadManager = new QNetworkAccessManager(this);
connect(_uploadManager,SIGNAL(finished(QNetworkReply*)),SLOT(replyFinished(QNetworkReply*)));
m_buf = NULL; //析构函数中,if( m_buf != NULL ) delete[] m_buf;
4) 准备传送文件,为了简单,关于异常处理代码都忽略了
QFile file( “文件全路径名" );
file.open(QIODevice::ReadOnly) )
int file_length = file.size();
QDataStream in(&file);
m_buf = new char[file_len];
in.readRawData( m_buf, file_len);
file.close();
//准备头信息
QNetworkRequest request( url );
//这句很重要,不然传二进制文件,服务器会说安全问题
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream");
request.setRawHeader("filename", filename.toUtf8() );
//准备数据
QByteArray arr = QByteArray( m_buf, file_len );
_reply = _uploadManager->post( request , arr );
connect(_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(upLoadError(QNetworkReply::NetworkError)));
connect(_reply, SIGNAL(uploadProgress ( qint64 ,qint64 )), this, SLOT( OnUploadProgress(qint64 ,qint64 )));
5)在相应的事件中加入自己需要的代码
replyFinished 事件中提示用户上传完毕
upLoadError 事件中提示遇到传输错误
OnUploadProgress 事件中更新进度条提示
三、备注
1)如果需要传送大文件,就不要一次读入所有数据,可以每次读取 10K,然后传送,传完后继续读取下 10K,如果遇到传输错误,可以重传刚才的 10K;
2)文中没有提到断点续传,其实这种方式断点续传是很容易的,每次传输后,都记录好已经传输的偏移量,下次从这里传输就好了,还可以把偏移量信息通过 HTTP 头发送给服务器,让服务器知道;
3)如果你不想用 QT,可以考虑用系统提供的 API 完成。
http://blog.csdn.net/zhangbinsijifeng/article/details/47603841
qt http 上传文件的更多相关文章
- Qt通过HTTP POST上传文件(python做服务端,附下载)
本文使用Qt Creator用HTTP POST的方法上传文件,并给出一个上传文件的例程. 本文主要客户端,所以对于服务器端程序编写的描述会比较简略 服务器使用Django编写,django服务器接收 ...
- Qt客户端阿里云服上传文件
整体原理: 阿里云提供了c程序上传文件到阿里云服务器的sdk工具包,将这个工具包继承在自己的客户端,调用接口即可实现上传文件. 前期准备: 1.阿里云c程序客户端的sdk,下载地址:https://h ...
- 一般处理程序上传文件(html表单上传、aspx页面上传)
html 表单上传文件 一般处理程序由于没有 apsx 页面的整个模型和控件的创建周期,而比较有效率.这里写一个用 html 表单进行文件上传的示例. 1. 表单元素选用 ...
- 使用WebClient上传文件时的一些问题
最近在使用WebClient做一个客户端上传图片到IIS虚拟目录的程序的时候,遇到了一些问题,这里主要给出参考步骤分享给大家. 测试环境 服务器端:Windows Server 2003,IIS6.0 ...
- php 上传文件 $_FILES['']['type']的值
php 上传文件 $_FILES['']['type']的值 一个函数 function upload_file($fname,$ftype,$fsize,$ferror,$ftmp_name,$fp ...
- 上传文件表单file,限制上传文件类型的方法--参数accept
我们使用<input type="file" />来上传文件,但是当你只想要上传某种格式的文件,比如说(jpg)文件时.可以通过accept来限制. <form& ...
- IE8/9 JQuery.Ajax 上传文件无效
IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ...
- 三种上传文件不刷新页面的方法讨论:iframe/FormData/FileReader
发请求有两种方式,一种是用ajax,另一种是用form提交,默认的form提交如果不做处理的话,会使页面重定向.以一个简单的demo做说明: html如下所示,请求的路径action为"up ...
- asp.net mvc 上传文件
转至:http://www.cnblogs.com/fonour/p/ajaxFileUpload.html 0.下载 http://files.cnblogs.com/files/fonour/aj ...
随机推荐
- Java设计模式之简单工厂、工厂方法和抽象工厂
在前面的学习中(参见前面的博客),我们学到了很多OO原则: 封装变化 多用组合,少用继承 针对接口/超类编程,不针对实现编程 松耦合 开闭原则 让我们从一个简单的类开始,看看如何将之改造成符合OO原则 ...
- win7配置简单的FTP服务器
1.开启一些win7默认是关闭状态的功能 步骤:控制面板 -> 程序和功能 -> 打开或关闭Windows功能,然后勾选下图中圈起来的部分: 2.添加FTP站点 步骤:桌面的计算机图标 - ...
- CSS常用操作-分类
- ReactJS 的背景及原理
原文链接:http://www.infoq.com/cn/articles/subversion-front-end-ui-development-framework-react 在Web开发中,我们 ...
- Django之路由系统
一.路由系统介绍 在django程序中,可以通过urls.py文件对所有的url进行任务的分配,根据路由规则的定义选择不同的业务处理函数进行处理 二.路由规则定义 1.路由规则代码如下,mysite/ ...
- 高性能WEB开发(11) - flush让页面分块,逐步呈现
高性能WEB开发(11) - flush让页面分块,逐步呈现 在处理比較耗时的请求的时候,我们总希望先让用户先看到部分内容,让用户知道系统正在进行处理,而不是无响应.一般大家在处理这样的情况,都使用a ...
- Linux内核如何启动并装载一个可执行程序
2016-04-07 张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000#/info 一.理解编译链接的 ...
- C#简单注册表操作实例
1.简介操作 //设置注册值 private void Button_Click(object sender, RoutedEventArgs e) { //路径及间隔符号要正确 //1.如果指定路径 ...
- (转)JSON对象长度和遍历方法
最近在修改一个HTML页面的JS的时候遍历JSON对象,却怎么也调试不通过.怪这个HTML网页不知道用了什么方法禁止了js错误提示,刚开始的时候不知道有这个问题,用chrome的开发人员工具都没发现错 ...
- Fiddler使用笔记
http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html#basic 1.filter的使用,跟踪某个网站的访问,例如:hr. ...