//Qt文件
QFile file("1.jpg");
if(!file.open (QIODevice::ReadOnly)){
    qDebug()<<"file open failed.";
    return;
}
QByteArray data=file.readAll ();
file.close ();
QNetworkRequest req(QUrl("http://localhost:88/index.php"));
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 上传文件的更多相关文章

  1. Qt通过HTTP POST上传文件(python做服务端,附下载)

    本文使用Qt Creator用HTTP POST的方法上传文件,并给出一个上传文件的例程. 本文主要客户端,所以对于服务器端程序编写的描述会比较简略 服务器使用Django编写,django服务器接收 ...

  2. Qt客户端阿里云服上传文件

    整体原理: 阿里云提供了c程序上传文件到阿里云服务器的sdk工具包,将这个工具包继承在自己的客户端,调用接口即可实现上传文件. 前期准备: 1.阿里云c程序客户端的sdk,下载地址:https://h ...

  3. 一般处理程序上传文件(html表单上传、aspx页面上传)

    html 表单上传文件        一般处理程序由于没有 apsx 页面的整个模型和控件的创建周期,而比较有效率.这里写一个用 html 表单进行文件上传的示例.        1. 表单元素选用 ...

  4. 使用WebClient上传文件时的一些问题

    最近在使用WebClient做一个客户端上传图片到IIS虚拟目录的程序的时候,遇到了一些问题,这里主要给出参考步骤分享给大家. 测试环境 服务器端:Windows Server 2003,IIS6.0 ...

  5. php 上传文件 $_FILES['']['type']的值

    php 上传文件 $_FILES['']['type']的值 一个函数 function upload_file($fname,$ftype,$fsize,$ferror,$ftmp_name,$fp ...

  6. 上传文件表单file,限制上传文件类型的方法--参数accept

    我们使用<input type="file" />来上传文件,但是当你只想要上传某种格式的文件,比如说(jpg)文件时.可以通过accept来限制. <form& ...

  7. IE8/9 JQuery.Ajax 上传文件无效

    IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ...

  8. 三种上传文件不刷新页面的方法讨论:iframe/FormData/FileReader

    发请求有两种方式,一种是用ajax,另一种是用form提交,默认的form提交如果不做处理的话,会使页面重定向.以一个简单的demo做说明: html如下所示,请求的路径action为"up ...

  9. asp.net mvc 上传文件

    转至:http://www.cnblogs.com/fonour/p/ajaxFileUpload.html 0.下载 http://files.cnblogs.com/files/fonour/aj ...

随机推荐

  1. 设计模式(七):Adapter 适配器模式 -- 结构型模式

    1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化.  例子1:iphone4,你即可以 ...

  2. 使用定制的ArrayAdapter制作ListView的Items(翻译)

    Translated by:AcerWang    原文出自:customizing-android-listview-items-with-custom-arrayadapter  背景介绍 对于现 ...

  3. Ubuntu 14.04 64位安装Android Studio 和 genymotion (上)

    先说下,Ubuntu 上安装Android Studio真是一路坑阿,一路坑阿,加上天  朝 防火墙挡着,折腾了快一天才弄好阿 找了n多教程,md不是抄的就是转的,而且都没说清楚具体咋装阿,一个图一个 ...

  4. 【KMP】Period

    KMP算法 Next[]函数深入理解,Next[]当前字符前匹配字符数,串长n-Next[i]=串内循环子串的长度p. 本题求子循环串内循环节数. Problem Description For ea ...

  5. 简单的新闻客户端APP开发(DCloud+thinkphp+scrapy)

    前端时间花了1个月左右,搞了个新闻APP,功能很简单,就是把页面版的新闻条目定时爬到后台数据库,然后用app显示出来. 1.客户端 使用了DCloud框架,js基本是个新手,从没写过像样的代码,htm ...

  6. C# 文件上传

     一.分析 本次博客,主要解决文件上传等一系列问题,将从两方面来论述,即1G以内文件和1G以上文件. 对于上传1G以内的文件,可以采用基本的三种上传方法:用Web控件FileUpload.html控件 ...

  7. 修改http中的refer(转)

    Referrer的重要性 HTTP请求中有一个referer的报文头,用来指明当前流量的来源参考页.例如在www.sina.com.cn/sports/上点击一个链接到达cctv.com首页,那么就r ...

  8. html中显示xml

    在工作中经常会遇到一些特殊的要求,比如在html中显示xml,xml的格式跟html很相似,同样包含了标签.属性.值,所以xml的标签等内容会在html中被转义 如果要在html中让xml的内容(包括 ...

  9. 二十六个月Android学习工作总结

    1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍. 2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该功能的运行过程写出来. 3.要有自己的知识库,可以是 ...

  10. UVAlive 6131 dp+斜率优化

    这道题和06年论文<从一类单调性问题看算法的优化>第一道例题很相似. 题意:给出n个矿的重量和位置,这些矿石只能从上往下运送,现在要在这些地方建造m个heap,要使得,sigma距离*重量 ...