![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Nick5 |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 22.2.2012 Пользователь №: 3233 Спасибо сказали: 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 |
![]()
Сообщение
#2
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 22.2.2012 Пользователь №: 3233 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Товарищи разработчики, неужели никто не знает ответ на этот вопрос?
Я отблагодарю. Пишите в личном сообщении. Или здесь в теме, кто готов решить эту проблему ![]() |
|
|
ernie |
![]()
Сообщение
#3
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 13.5.2010 Из: Irkutsk Пользователь №: 1712 Спасибо сказали: 11 раз(а) Репутация: ![]() ![]() ![]() |
Есть пример XML-ки то выходной?пока вы написали как она строиться в PHP,как я понял
|
|
|
Nick5 |
![]()
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 22.2.2012 Пользователь №: 3233 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
к сожалению, примера нет..и даже не могу его сделать..есть только код
|
|
|
ernie |
![]()
Сообщение
#5
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 13.5.2010 Из: Irkutsk Пользователь №: 1712 Спасибо сказали: 11 раз(а) Репутация: ![]() ![]() ![]() |
Начнём с того ,что я бы сначала засунул 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 |
![]()
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 22.2.2012 Пользователь №: 3233 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
спасибо большое!
буду думать в этом направлении |
|
|
Nick5 |
![]()
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 22.2.2012 Пользователь №: 3233 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Начнём с того ,что я бы сначала засунул 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 |
![]()
Сообщение
#8
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 13.5.2010 Из: Irkutsk Пользователь №: 1712 Спасибо сказали: 11 раз(а) Репутация: ![]() ![]() ![]() |
Начнём с того ,что я бы сначала засунул 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 |
![]()
Сообщение
#9
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 22.2.2012 Пользователь №: 3233 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
скажите, а как с вами связаться? можете свою почту в л.с. написать?
|
|
|
Nick5 |
![]()
Сообщение
#10
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 22.2.2012 Пользователь №: 3233 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Начнём с того ,что я бы сначала засунул 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); как все-таки можно связаться с вами? |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 3.5.2025, 0:15 |