2012-03-12 75 views
0

我有一個使用Qt將.txt文件上傳到我的Java servlet服務器的問題。上傳.txt文件到服務器使用Qt中的HttpRequest

我花了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); 

這是另一種解決方案,它不工作呢既不:

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

你所說的這些行預計:'回覆=南 - >柱(請求,文件); file-> setParent(reply); reply = nam-> get(request);'? – 2012-03-12 14:18:17

+0

當你說「沒有收到任何東西」時,你的意思是沒有連接或者servlet沒有收到數據?你確定你的servlet嗎? – Koying 2012-03-12 14:29:23

回答

0

你不能post()東西服務器和線下做get()期待看到該文件。 通常你有權發佈,等到post完成了,比你可以看到修改.. here有很多的鏈接,你可以用做正確的事情