Qt 使用http如何上传多个文件(图片),如何设置http的body

henry_19832 henry_19832 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如题,在目录中有多个图片,~/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中,我想问问,用什么方式比较正规的实现上传多个文件呢?或者可以看什么资料可以了解相关情况?
...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部
henry_19832
Qt 21,503 成员 26,693 内容