crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Ответ от сервера. HELP
Nick5
  опции профиля:
сообщение 22.2.2012, 15:59
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 22.2.2012
Пользователь №: 3233

Спасибо сказали: 0 раз(а)




Репутация:   0  


Друзья,

сразу скажу, что я новичок в программировании, но надо срочно разобраться с одним вопросом. Прошу вашей помощи.

Есть код, который отправляет файл на сервер:

if (attachmentFileName != "")
{
fileInfo.setFile(attachmentFileName);
QString bound="---------------------------123";
QByteArray data(QString("--"+bound+"\r\n").toAscii());
data += "Content-Disposition: form-data; name=\"action\"\r\n\r\n";
data += "\r\n";
data += QString("--" + bound + "\r\n").toAscii();
data += "Content-Disposition: form-data; name=\"file\"; filename=\""+fileInfo.fileName()+"\"\r\n";
data += "Content-Type: image/"+fileInfo.suffix().toLower()+"\r\n\r\n";
QFile file(fileInfo.absoluteFilePath());
file.open(QIODevice::ReadOnly);
data += file.readAll();
data += "\r\n";
data += QString("--" + bound + "\r\n").toAscii();
data += QString("--" + bound + "\r\n").toAscii();
data += "Content-Disposition: form-data; name=\"desc\"\r\n\r\n";
data += "\r\n";

QNetworkRequest r(QUrl("http://ХХХХХХХХХХХХХХХХ.php?"+"p=upload"));


r.setRawHeader(QString("Content-Type").toAscii(),QString("multipart/form-data; boundary=" + bound).toAscii());
r.setRawHeader(QString("Content-Length").toAscii(), QString::number(data.length()).toAscii());
manager->post(r, data);

attachmentFileName.clear();
}


на что сервер дает ответ в XML такой:
.....
здесь происходит обработка имени файла, а именно переименование, и потом перемещение:
.....
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $fn);
//echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
$messageUploadXml = $messageXml->addChild('upload', "upload/" . $fn);
.....


Так вот в итоге вопрос:
какую мне строчку в Qt написать, чтобы получить новое имя отправленного файла.
Чувствую, что должно быть просто, но не пойму, как...

Очень рассчитываю на вашу помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Nick5
  опции профиля:
сообщение 23.2.2012, 11:21
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 22.2.2012
Пользователь №: 3233

Спасибо сказали: 0 раз(а)




Репутация:   0  


Товарищи разработчики, неужели никто не знает ответ на этот вопрос?
Я отблагодарю. Пишите в личном сообщении. Или здесь в теме, кто готов решить эту проблему :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 23.2.2012, 13:19
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


Есть пример XML-ки то выходной?пока вы написали как она строиться в PHP,как я понял
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Nick5
  опции профиля:
сообщение 23.2.2012, 14:47
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 22.2.2012
Пользователь №: 3233

Спасибо сказали: 0 раз(а)




Репутация:   0  


к сожалению, примера нет..и даже не могу его сделать..есть только код
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 23.2.2012, 18:50
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


Начнём с того ,что я бы сначала засунул xml которая приходит от сервера в QDomDocument:
QDomDocument doc;
doc.setContent(тут ответ от сервера в QByteArray или QString);
А потом бы там уже искал:
QDomNodeList list = doc. elementsByTagName("upload"); //тут получили лист элементов upload,как я понимаю,он у вас один в xml'ке,значит дальше можно так сделать:
QDomNode node = list.item(0);
а таперь попробовать можно и значение получить:
QString uploadFileName = node.nodeValue();

Вот как - то так,надо пробовать и смотреть ,я могу ошибаться



И кстати да,вам же еще ответ надо от сервера получить,для этого в ваш код надо добавить:

connect(manager,finished ( QNetworkReply * ),this,ващ слот для обработки ответа(QNetworkReply * ));

Скажем слот назовём handleReply,Значит примерно такой код будет:

void вашкласс::handleReply(QNetworkReply *reply)
{
QByteArray content = reply->readAll();
//тут код,который я писал выше

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Nick5
  опции профиля:
сообщение 23.2.2012, 21:08
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 22.2.2012
Пользователь №: 3233

Спасибо сказали: 0 раз(а)




Репутация:   0  


спасибо большое!
буду думать в этом направлении
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Nick5
  опции профиля:
сообщение 24.2.2012, 11:56
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 22.2.2012
Пользователь №: 3233

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ernie @ 23.2.2012, 19:50) *
Начнём с того ,что я бы сначала засунул xml которая приходит от сервера в QDomDocument:
QDomDocument doc;
doc.setContent(тут ответ от сервера в QByteArray или QString);
А потом бы там уже искал:
QDomNodeList list = doc. elementsByTagName("upload"); //тут получили лист элементов upload,как я понимаю,он у вас один в xml'ке,значит дальше можно так сделать:
QDomNode node = list.item(0);
а таперь попробовать можно и значение получить:
QString uploadFileName = node.nodeValue();

Вот как - то так,надо пробовать и смотреть ,я могу ошибаться



И кстати да,вам же еще ответ надо от сервера получить,для этого в ваш код надо добавить:

connect(manager,finished ( QNetworkReply * ),this,ващ слот для обработки ответа(QNetworkReply * ));

Скажем слот назовём handleReply,Значит примерно такой код будет:

void вашкласс::handleReply(QNetworkReply *reply)
{
QByteArray content = reply->readAll();
//тут код,который я писал выше

}


не совсем понял, что здесь в скобках писать
doc.setContent(тут ответ от сервера в QByteArray или QString);
скажите пожалуйста, что именно здесь стоит написать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 24.2.2012, 12:17
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


Цитата(Nick5 @ 24.2.2012, 17:56) *
Цитата(ernie @ 23.2.2012, 19:50) *
Начнём с того ,что я бы сначала засунул xml которая приходит от сервера в QDomDocument:
QDomDocument doc;
doc.setContent(тут ответ от сервера в QByteArray или QString);
А потом бы там уже искал:
QDomNodeList list = doc. elementsByTagName("upload"); //тут получили лист элементов upload,как я понимаю,он у вас один в xml'ке,значит дальше можно так сделать:
QDomNode node = list.item(0);
а таперь попробовать можно и значение получить:
QString uploadFileName = node.nodeValue();

Вот как - то так,надо пробовать и смотреть ,я могу ошибаться



И кстати да,вам же еще ответ надо от сервера получить,для этого в ваш код надо добавить:

connect(manager,finished ( QNetworkReply * ),this,ващ слот для обработки ответа(QNetworkReply * ));

Скажем слот назовём handleReply,Значит примерно такой код будет:

void вашкласс::handleReply(QNetworkReply *reply)
{
QByteArray content = reply->readAll();
//тут код,который я писал выше

}


не совсем понял, что здесь в скобках писать
doc.setContent(тут ответ от сервера в QByteArray или QString);
скажите пожалуйста, что именно здесь стоит написать?


Вот смотрите :
тут вы получаете содержание ответа сервера: QByteArray content = reply->readAll();
а потом этот ответ заворачиваете в QDocDocument:
doc.setContent(content);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Nick5
  опции профиля:
сообщение 24.2.2012, 20:32
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 22.2.2012
Пользователь №: 3233

Спасибо сказали: 0 раз(а)




Репутация:   0  


скажите, а как с вами связаться? можете свою почту в л.с. написать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Nick5
  опции профиля:
сообщение 26.2.2012, 17:20
Сообщение #10


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 22.2.2012
Пользователь №: 3233

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ernie @ 24.2.2012, 13:17) *
Цитата(Nick5 @ 24.2.2012, 17:56) *
Цитата(ernie @ 23.2.2012, 19:50) *
Начнём с того ,что я бы сначала засунул xml которая приходит от сервера в QDomDocument:
QDomDocument doc;
doc.setContent(тут ответ от сервера в QByteArray или QString);
А потом бы там уже искал:
QDomNodeList list = doc. elementsByTagName("upload"); //тут получили лист элементов upload,как я понимаю,он у вас один в xml'ке,значит дальше можно так сделать:
QDomNode node = list.item(0);
а таперь попробовать можно и значение получить:
QString uploadFileName = node.nodeValue();

Вот как - то так,надо пробовать и смотреть ,я могу ошибаться



И кстати да,вам же еще ответ надо от сервера получить,для этого в ваш код надо добавить:

connect(manager,finished ( QNetworkReply * ),this,ващ слот для обработки ответа(QNetworkReply * ));

Скажем слот назовём handleReply,Значит примерно такой код будет:

void вашкласс::handleReply(QNetworkReply *reply)
{
QByteArray content = reply->readAll();
//тут код,который я писал выше

}


не совсем понял, что здесь в скобках писать
doc.setContent(тут ответ от сервера в QByteArray или QString);
скажите пожалуйста, что именно здесь стоит написать?


Вот смотрите :
тут вы получаете содержание ответа сервера: QByteArray content = reply->readAll();
а потом этот ответ заворачиваете в QDocDocument:
doc.setContent(content);


как все-таки можно связаться с вами?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 3:57