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

henry_19832 2014-12-05 10:02:00
如题,在目录中有多个图片,~/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中,我想问问,用什么方式比较正规的实现上传多个文件呢?或者可以看什么资料可以了解相关情况?
...全文
509 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,239

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧