Qt使用post上传压缩文件
来源:互联网 发布:java浅蓝色代码 编辑:程序博客网 时间:2024/06/04 20:03
在项目中需要将本地的一个文件夹上传到服务器,于是想到先将起压缩成ZIP文件,然后上传。压缩功能的做法见另一篇博文Qt将文件夹压缩成ZIP文件.
由于经验所限,不太懂网络编程。根据例子,使用 QNetworkAccessManager 和 QNetworkRequest 上传文件内容,总是错误。最后在一些好友的帮助下,终于解决了问题,记下来备忘。也希望给遇到类似问题的同学一个帮助。由于没有弄懂真正的原理和机制,仅贴出代码,给有需要的同学参考。
接口文档说明:
上传实现函数:
把代码也粘上:
void UploadFile_API::sendRequest(const QString &userName, const QString &teacherSession, const QString &zipfile){ status = -1; msg = QStringLiteral("连接超时,请检查您的网络设置。"); //从服务器取得时间戳 UnixTimeAPI unixTimeAPI; if (!unixTimeAPI.isOK()) { qWarning()<<Q_FUNC_INFO<<"Obtain UnixTime failed."; return; } //设置发送的数据 uint unixTime_s = unixTimeAPI.getUnixTime_s(); QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); QHttpPart signaturePart; signaturePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"").arg("signature"))); signaturePart.setBody(NetworkServerUtil::getSignature(unixTime_s).toLatin1()); QHttpPart utPart; utPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"").arg("unix_time"))); utPart.setBody(QString::number(unixTime_s).toLatin1()); QHttpPart tiPart; tiPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"").arg("teacher_id"))); tiPart.setBody(userName.toLatin1()); QHttpPart tsPart; tsPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"").arg("teacher_session"))); tsPart.setBody(teacherSession.toLatin1()); QHttpPart imagePart; imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"; filename=\"%2\"").arg("zipfile").arg(QFileInfo(zipfile).fileName()))); QFile *file = new QFile(zipfile); file->open(QIODevice::ReadOnly); imagePart.setBodyDevice(file); file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart multiPart->append(signaturePart); multiPart->append(utPart); multiPart->append(tiPart); multiPart->append(tsPart); multiPart->append(imagePart); //设置头信息 QNetworkRequest networkRequest; networkRequest.setUrl(QUrl(QString("http://%1/tsp/uploadfile").arg(NetworkServerUtil::getStableIP()))); //发送请求 QNetworkReply *networkReply = m_networkManager->post(networkRequest, multiPart); multiPart->setParent(networkReply); // delete the multiPart with the reply}
1 0
- Qt使用post上传压缩文件
- qt压缩文件
- Qt Post上传图片文件到服务器
- Qt 使用QuaZip库生成MD5加密Zip格式压缩文件
- 使用cURL POST上传文件
- ios 使用post上传图片
- asynchttpclien使用Post数据上传
- 请问,怎么上传压缩文件??
- asp.net上传压缩文件
- 关于上传压缩文件解析
- QT 通过POST方法,上传文件到服务器
- android 使用post方式上传文件
- 使用libcurl POST数据和上传文件
- Python中使用POST方式上传文件
- 使用HttpUrlConnection进行post请求上传文件
- 使用libcurl POST数据和上传文件
- Python中使用POST方式上传文件
- 使用post上传的lr脚本
- JSPatch bug热修复 集成+简单使用
- JVM-内存模型及垃圾收集算法
- 创建TV应用
- Java中final和static
- JavaScript进阶学习——事件响应
- Qt使用post上传压缩文件
- Android 自定义键盘中禁用点击预览弹窗
- HttpClient 模拟登陆百度 2015.10.21 JAVA
- 51nod-【1067 Bash游戏 V2】
- xtrabackup 恢复出现错误InnoDB: Error: log file ./ib_logfile2 is of different size 0 0 bytes
- 自定义listView下拉刷新
- recover database 的几种不同方式区别
- Distributed TensorFlow,分布式Tensorflow官方文档
- 时刻检测服务是否正常--心跳检测服务器是否正常的开源项目