[Solved]Problem Downloading a file
-
as LinusA said - provide us with some code, else nobody can really help you further, without seeing what could be wrong. Also, post any qDebug() output you get from your app (most important the results from the http request of QNetworkAccessManager
-
This is my code:
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip")));
@After this request function: connectionError, it's a slot connected in this way:
@
connect(iNetReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(connectionError(QNetworkReply::NetworkError)));
@Write on console: Error code= 203
@
void PlotterDownloadThread::connectionError(QNetworkReply::NetworkError code)
{
qDebug()<<"Error code= "<<code;
}
@ -
as stated earlier, your URL should be percent-encoded. I don't see the .toPercentEncoding() method used, even though you said you used it.
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip")));
@should be
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip").toPercentEncoding()));
@ -
[quote]My url already have %_2_B instead of +, but server when i perform get answer: ContentNotFoundError, but if i put the same url into firefox I’m able to download right file.[/quote]
Can you use wireshark or a similar tool to analyze the HTTP traffic and understand what's going on?
[quote author="Eus" date="1314173671"]as stated earlier, your URL should be percent-encoded. I don't see the .toPercentEncoding() method used, even though you said you used it.
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip")));
@should be
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip").toPercentEncoding()));@
[/quote]This is completely nonsense. Not only that doesn't compile, but there's no QNetworkRequest(QByteArray) ctor, and you don't want to percent encode that url (thus escaping :, /, ?, &, etc.).
-
yeah, my bad, just noticed that too. And I haven't tried to compile it, it was using his code as starting point. He could percent encode the name only.....
-
[quote author="peppe" date="1314174967"]
This is completely nonsense. Not only that doesn't compile, but there's no QNetworkRequest(QByteArray) ctor
[/quote]The compiler will call the non-explicit QString(QByteArray) constructor for this, unless QT_NO_CAST_FROM_ASCII is defined.
-
[quote author="Volker" date="1314177476"]
[quote author="peppe" date="1314174967"]
This is completely nonsense. Not only that doesn't compile, but there's no QNetworkRequest(QByteArray) ctor
[/quote]The compiler will call the non-explicit QString(QByteArray) constructor for this, unless QT_NO_CAST_FROM_ASCII is defined.
[/quote]Nope -- QNetwokRequest wants a QUrl. There are two conversions to be made (QByteArray -> QString -> QUrl), and C++ forbids that (not to mention the fact that you can disable either of them with macros).
-
Then what should i do?
-
Constructing a valid QUrl to pass to QNetworkRequest sounds like a reasonable path to walk...
-
It's what I'm trying to do...
-
[quote author="qwertyuiopearendil" date="1314180408"]Then what should i do?[/quote]
As I said, dump HTTP headers and inspect them.
-
[quote author="peppe" date="1314177763"]
Nope -- QNetwokRequest wants a QUrl. There are two conversions to be made (QByteArray -> QString -> QUrl), and C++ forbids that (not to mention the fact that you can disable either of them with macros).
[/quote]Eek, you're right. I mixed up the parentheses. I need to do more LISP to get used to that ;-)
-
You might want to read the documentation for QUrl::fromUserInput then. It contains some more info on how to deal with string encodings and the likes.
-
Solved!!!
Below the solution about my problem:@
QString strUrl="http://myStore-dev.com/zip/mioFile%2_B.zip";QByteArray baUrl(strUrl.toAscii().data());
QUrl tmpUrl1;
tmpUrl1.setEncodedUrl(baUrl);
iNetReply = iNetManager->get(QNetworkRequest(tmpUrl1));
@Thanks to all.
Bye bye.
-
Please be sure and add [Solved] to the beginning of the thread title. Thanks!