Qt 使用http如何上传多个文件(图片),如何设置http的body
如题,在目录中有多个图片,~/a.jpg ~/b.jpg ~/c.jpg
Upload_Picture的结构:
#include <QObject>
#include <QtNetwork>
class Upload_Picture : public QObject
{
Q_OBJECT
public:
Upload_Picture();
public:
QNetworkAccessManager* SM_manager;
QNetworkReply* SM_reply;
QUrl SM_url; //下载目标位置
QByteArray SM_data;
signals:
void SM_begin_post();
public slots:
void SM_SendMsgStart();
void SM_SendMsgFinish();
void SM_Send();
};
void Upload_Picture::SM_SendMsgStart()
{
QNetworkRequest req = QNetworkRequest(this->SM_url);
req.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
prequest->setHeader(QNetworkRequest::ContentLengthHeader,data.length());
this->SM_reply = this->SM_manager->post(req,this->SM_data);
connect(this->SM_reply,SIGNAL(finished()),
this,SLOT(SM_SendMsgFinish()));
}
void Upload_Picture::SM_Send()
{
this->SM_url.setUrl(QString("http://183.62.254.110:8080/server_uploadImageShot.do"));
this->SM_data.clear();
.........
this->SM_data.append(QString("imageShot.boxCode=")+BikeDevice+QString("&"));
this->SM_data.append(QString("imageShot.exceptionCode=")+BikeDevice+QString("&"));
this->SM_data.append(QString("imageShot.sn=")+BikeSN+QString("&"));
this->SM_data.append(QString("imageShot.uploadTime=")+BikeTime+QString("&"));
char* m_buf;
QFile file("~/a.jpg");
file.open(QIODevice::ReadOnly);
int file_len = file.size();
QDataStream in(&file);
m_buf = new char[file_len];
in.readRawData( m_buf, file_len);
file.close();
QByteArray arr = QByteArray(m_buf, file_len);
this->SM_data = this->SM_data + arr;
this->SM_SendMsgStart();
}
主要函数SM_Send中做了一些字段设置和数据打包,触发SM_SendMsgStart后就会实现post。但问题是,我发现这样做只能把文件数据放在http的头里面,而不是body中,我想问问,用什么方式比较正规的实现上传多个文件呢?或者可以看什么资料可以了解相关情况?
Upload_Picture的结构:
#include <QObject>
#include <QtNetwork>
class Upload_Picture : public QObject
{
Q_OBJECT
public:
Upload_Picture();
public:
QNetworkAccessManager* SM_manager;
QNetworkReply* SM_reply;
QUrl SM_url; //下载目标位置
QByteArray SM_data;
signals:
void SM_begin_post();
public slots:
void SM_SendMsgStart();
void SM_SendMsgFinish();
void SM_Send();
};
void Upload_Picture::SM_SendMsgStart()
{
QNetworkRequest req = QNetworkRequest(this->SM_url);
req.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
prequest->setHeader(QNetworkRequest::ContentLengthHeader,data.length());
this->SM_reply = this->SM_manager->post(req,this->SM_data);
connect(this->SM_reply,SIGNAL(finished()),
this,SLOT(SM_SendMsgFinish()));
}
void Upload_Picture::SM_Send()
{
this->SM_url.setUrl(QString("http://183.62.254.110:8080/server_uploadImageShot.do"));
this->SM_data.clear();
.........
this->SM_data.append(QString("imageShot.boxCode=")+BikeDevice+QString("&"));
this->SM_data.append(QString("imageShot.exceptionCode=")+BikeDevice+QString("&"));
this->SM_data.append(QString("imageShot.sn=")+BikeSN+QString("&"));
this->SM_data.append(QString("imageShot.uploadTime=")+BikeTime+QString("&"));
char* m_buf;
QFile file("~/a.jpg");
file.open(QIODevice::ReadOnly);
int file_len = file.size();
QDataStream in(&file);
m_buf = new char[file_len];
in.readRawData( m_buf, file_len);
file.close();
QByteArray arr = QByteArray(m_buf, file_len);
this->SM_data = this->SM_data + arr;
this->SM_SendMsgStart();
}
主要函数SM_Send中做了一些字段设置和数据打包,触发SM_SendMsgStart后就会实现post。但问题是,我发现这样做只能把文件数据放在http的头里面,而不是body中,我想问问,用什么方式比较正规的实现上传多个文件呢?或者可以看什么资料可以了解相关情况?
...全文
相关推荐
使用QT实现文件上传和下载----ftp服务器
在本文中,我们将深入探讨如何使用QT库来实现文件的上传和下载功能,特别是与FTP服务器的交互。
QT通过HTTP实现图片实时上传和下载并显示源代码实例
QT库是一个功能强大的跨平台应用程序开发框架,尤其在图形用户界面和网络编程方面表现突出。在本实例中,我们将探讨如何使用QT通过HTTP协议来实现图片的实时上传、下载及显示。
HttpUpload Qt Http上传文件简单示例
本文介绍了一个基于Qt框架的HTTP文件上传功能实现。用户可以通过界面选择文件并上传,上传过程中进度条实时显示进度。代码中包含选择文件、上传文件、上传完成和错误处理等功能。同时,还实现了一个基于Tor
基于HTTP的Qt下载上传研究
### 基于HTTP的Qt下载上传研究#### 1. 开始本文将详细介绍如何在Qt环境下实现基于HTTP协议的文件下载与上传功能,并针对过程中遇到的各种问题提供解决方案。
Qt模拟http server传输大文件
本教程将聚焦于使用Qt库创建一个模拟的HTTP服务器来处理大文件传输,并结合Python编写客户端进行交互。


