使用Qt中的Http Request将.txt文件上传到服务器

时间:2012-03-12 14:14:23

标签: qt

我遇到了使用Qt将.txt文件上传到我的java servlet服务器的问题。

我花了5天时间尝试了很多解决方案。但它们都没有奏效。有人可以帮助我吗?

问题是Qt代码可以正常工作。但是服务器没有收到来自Qt的httprequest的任何内容。

这是Qt中的一个解决方案:

QFile file("dataToSend.txt");
nam = new QNetworkAccessManager(this);
QObject::connect(nam, SIGNAL(finished(QNetworkReply*)),
             this, SLOT(finishedSlot(QNetworkReply*)));
QNetworkRequest r(QUrl("http://localhost:9999/server"));

QString bound="---------------------------723690991551375881941828858";
QByteArray data(QString("--"+bound+"\r\n").toAscii());
data += QString("--" + bound + "\r\n").toAscii();
data += "Content-Disposition: form-data; name=\"file\"; filename=\""+file.fileName()+"\"\r\n";
data += "Content-Type: text/plain\r\n\r\n";
file.open(QIODevice::ReadOnly);
data += file.readAll();
data += "\r\n";
data += QString("--" + bound + "\r\n").toAscii();
r.setRawHeader(QString("Content-Type").toAscii(),QString("multipart/form-data; boundary=" + bound).toAscii());
r.setRawHeader(QString("Content-Length").toAscii(), QString::number(data.length()).toAscii());

reply = nam->post(r,data);
reply=nam->get(r);

这是另一种解决方案,它既不会w:

nam = new QNetworkAccessManager(this);
QObject::connect(nam, SIGNAL(finished(QNetworkReply*)),
            this, SLOT(finishedSlot(QNetworkReply*)));
QFile *file=new QFile("dataToSend.txt");
QNetworkRequest request(QUrl("http://localhost:9999/server"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-streamd");

if(!file->open(QIODevice::ReadOnly)){
   qDebug("%s\n",qPrintable("can't open the file!"));
   return;
}

// post data to server
reply= nam->post(request,file);
file->setParent(reply);
reply=nam->get(request);

1 个答案:

答案 0 :(得分:0)

你不能post()向服务器提供某些内容,并且下面的一行有get()期望查看该文件。 通常你必须发帖,等到post完成,然后你可以看到修改.. here您可以使用很多链接来做正确的事情