QT6 QNetworkRequest and FTP
-
Using Qt 5.15.2 the following code works, it connects to ftp server and puts file.
In Qt 6.3.0 it does not work, Protocol "ftp" unknown.
From same QtCreator, I just switch between Desktop Qt 6.15.2 GCC 64bit and Desktop Qt 6.3.0 GCC 64bit. Both opensource untouched installations on Linux Mint 20.3.bool DLG_MAIN::Put(QString sUrl, int iPort, QString sUser, QString sPass, QString sFile) { QNetworkAccessManager nm; QEventLoop loop; QUrl url("ftp://ftpserver.name_withhold.com" + sUrl); url.setUserName(sUser); url.setPassword(sPass); url.setPort(iPort); QFile data(sFile); QNetworkRequest *nrq = new QNetworkRequest(url); data.open(QIODevice::ReadOnly); auto nre = nm.put(*nrq, &data); QObject::connect(nre, SIGNAL(uploadProgress(qint64, qint64)),SLOT(putProgess(qint64, qint64))); QObject::connect(nre, SIGNAL(finished()), &loop, SLOT(quit())); loop.exec(); data.close(); if (nre->error() == QNetworkReply::NoError) return(true); else { int i = nre->error(); QString strReply = (QString)nre->errorString(); return(false); } }
-
@MartinGU
I don't know, but at Qt6 https://forum.qt.io/topic/125203/qt6-qnetworkaccessmanager-ftp-connection-and-manipulation seems to report the same issue (no resolution)?OK, it looks like you need to read QT6 Protocol "ftp" is unknown and https://www.qt.io/blog/qt-network-in-qt-6.
-
Thanks JonB!
Yes, there is still no ftp-support in Qt6. It was said to be put in a separate module.
That was said for more than a year ago...Found this in qt6-dev for 6.4 but if it will be released and when...
https://doc-snapshots.qt.io/qt6-dev/qtscxml-ftpclient-example.htmlFor us its to much stuff that is not yet in Qt6 or has changed to be much more complicated. Better to stay with QT5...
-
Hello!
Sorry! This is partially my fault :)
The original plan for Qt 6 was to remove FTP from the default distribution given low usage and relevance in today's tech stacks. I, of course, knew that some people would still be interested in FTP, so the plan was to 'check the pulse' in 6.0/6.1 to see if anyone was actually missing the support. In the end there has been little-to-no demand to bring it back so it was never prioritized work internally.The reason for why the old support was removed that it was a somewhat brittle backend which was just based on the old QFtp code. It had limited support for normal FTP functionality today, and limited error handling. It was thus a cause for multiple bug-reports for 'simple' things with only complex/risky solutions.
The new support was meant to be a plugin, either simply bringing back the old backend in plugin-form, potentially labelling it as just existing for compat reasons, or by writing plugins using platform-native APIs (WinINet, etc.)
I suggest making a feature request about bringing FTP support back if you need it, as I cannot get something like this prioritized without showing there is demand :)
-
@manordheim said in QT6 QNetworkRequest and FTP:
remove FTP from the default distribution given low usage and relevance in today's tech stacks
I do not doubt that you know/have your finger on the IT pulse more than I, but I'm pretty surprised by this. Since when has FTP become irrelevant?
-
Hi,
@JonB said in QT6 QNetworkRequest and FTP:
@manordheim said in QT6 QNetworkRequest and FTP:
remove FTP from the default distribution given low usage and relevance in today's tech stacks
I do not doubt that you know/have your finger on the IT pulse more than I, but I'm pretty surprised by this. Since when has FTP become irrelevant?
I would say since S3, DropBox and the likes have become widely adopted as a mean to store and share files.
-
@JonB
As Samuel said, for file sharing in an organization there are more mainstream ways of doing it now. And it doesn't include windows network shares :)
For simple upload/download it's quite simple to set up a http server end-point (think transmitting logs/artifacts). Which will likely also have better performance compared to FTP.
When exactly it happened is hard to tell, though I wouldn't say it's fully irrelevant yet. But it seems closer than ever :). -
@manordheim , @SGaist
Thank you for your comments. My commercial usage is obviously very different from yours, or maybe you are more talking about social/personal users.When we "share" files --- in either direction --- with customers etc. (external), we certainly do not use e.g. DropBox. They expect FTP access, with suitable username & password. When they download from our website (or if required upload to a secure area) they expect FTP to be available; or they may have their own FTP server for exchanging files with us. When I manage our website I use FTP to upload (large) files there. And so on.
So for my own part I would like to see Qt continue to support FTP. (Though I do not use Qt in my commercial life, only in my personal "hobby" life.) And over the years of answering questions here I have seen many requests/questions for FTP functionality, where we referred users to the old
QFtp
support. But maybe it's less now.But I bow to your superior experience.
-
Nothing wrong with using FTP (unless it's not sftp ;-)).
As for the support, if memory serves QFtp was already turned into a module. So if you should be able to use it. You can also help with its maintenance to keep it alive :-)
-
@JonB I'd prefer no bowing. :) As I said, FTP is certainly still in use. And what you describe of passing files across companies with FTP is something I'm familiar with. But that's usually been a process outside the application. The workflow I've heard of in those cases is usually:
- generate reports/results with the relevant application
- upload to customer's ftp/make available on our ftp using a cmdline tool or some gui application
Though your experience could differ. :)
-
@SGaist said in QT6 QNetworkRequest and FTP:
Nothing wrong with using FTP
Well, there's lots of things wrong with FTP :) Can't remember who brought this link up, maybe it as even in some discussions about this very feature of Qt Network: https://mywiki.wooledge.org/FtpMustDie
The security issue is probably fixed by SFTP, and 'don't break my workflow' is a valid requirement for a framework ... but I found the page entertaining.
-
Hi,
Sorry to reply to this old thread, but do we have any news regarding FTP support ? I use it in my personal project and that missing support hold me from moving to Qt6...Thank you for your time !
-
As a major worldwide company whose customers are also major and worldwide, we and our customers expect to be able to use FTP as a means of communication between our devices. Yes we have and use other modern and appropriate mechanisms available for primary communication protocols but we still have current use cases which will outlast the Qt6 lifetime. Please give bringing FTP back to Qt6 some serious consideration otherwise large companies with heavy investments in Qt are going to have to consider what would be a costly course of direction change with significant D&D and no ROI. Thank you.
-
@Mike-Trahearn-0
I do not disagree with you, but be aware this is a user forum. We have no influence over what The Qt Company does. Your comments would be best addressed to them. -
Is there a strong reason why it must be done via a Qt-ish FTP API? How about using
QProcess
to run cURL?...or perhaps WinSCP if you're supporting Windows only?
-
@JKSH
Because using external binaries is not practical to implement. You have to manage binaries for all supported platforms (windows, macOS, linux) but the hard part is parsing output data, if you need to get status of download/upload, you have to parse output of curl.
Yes, that can be done ! But this is not very practical... -
@legerborea said in QT6 QNetworkRequest and FTP:
Because using external binaries is not practical to implement. You have to manage binaries for all supported platforms (windows, macOS, linux) but the hard part is parsing output data, if you need to get status of download/upload, you have to parse output of curl.
OK, how about using the
libcurl
library instead? That's very cross-platform.