2012-03-12 2 views
0

У меня возникла проблема загрузки файла .txt на мой сервер сервлетов Java с помощью Qt.Загрузите файл .txt на сервер с помощью HttpRequest в Qt

Я потратил на это 5 дней и попробовал много решений. Но никто из них не работал. Кто-нибудь может мне помочь?

Проблема в том, что код Qt может работать без ошибок. Но сервер не получил ничего от httprequest из Qt.

Это одно решение в 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); 

Это еще одно решение, оно не wokring ни:

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

что вы ожидаете от этих строк: 'ответа = Нам -> сообщения (запрос, файл); файл-> setParent (ответ); ответить = nam-> get (request); '? –

+0

Когда вы говорите «ничего не получали», вы имеете в виду отсутствие соединения или сервлет не получает данные? Вы уверены в своем сервлете? – Koying

ответ

0

вы не можете post() что-то на сервере и линии ниже сделать get() ожидающий увидеть файл. Обычно вы должны отправить, подождать, пока post не будет закончен, и чем вы можете увидеть изменение .. here есть много ссылки вы можете использовать, чтобы сделать все правильно

Смежные вопросы