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中,我想问问,用什么方式比较正规的实现上传多个文件呢?或者可以看什么资料可以了解相关情况?