参考:
https://blog.csdn.net/qq_41622002/article/details/109642259
https://blog.csdn.net/Sakuya__/article/details/86682181
下载:
QUrl mUrl;
mUrl.setScheme("ftp"); //不设置这个的话,会报QNetworkReply::ContentAccessDenied
mUrl.setUserName("myName");
mUrl.setPassword("12345");
mUrl.setUrl("ftp://127.0.0.1/123.txt");
qDebug() << mUrl;
QNetworkRequest request(mUrl);
auto reply = mNetMan.get(request);
connect(reply, &QNetworkReply::finished, [=](void){
qDebug() << QString::fromUtf8(reply->readAll());
});
connect(reply, qOverload<QNetworkReply::NetworkError>(&QNetworkReply::error) , [=](QNetworkReply::NetworkError error){
qDebug() << reply->error();
});
上传:
QString ftpPath = "ftp://127.0.0.1";
QString filePath;
filePath = "456.txt";
QFile *file = new QFile(filePath);
file->open(QIODevice::ReadOnly);
QByteArray byte_file = file->readAll();
QString fileName;
fileName = "abc.txt";
QString m_ftpPath;
m_ftpPath = ftpPath + "/" + fileName;
// 把选中的文件上传到服务器
QUrl mUrl(m_ftpPath);
mUrl.setScheme("ftp"); //不设置这个的话,会报QNetworkReply::ContentAccessDenied
mUrl.setUserName("myName");
mUrl.setPassword("12345");
mUrl.setUrl(m_ftpPath);
QNetworkRequest request(mUrl);
auto reply = mNetMan.put(request, byte_file);
connect(reply, &QNetworkReply::finished, [=](void){
qDebug() << QString::fromUtf8(reply->readAll());
});
connect(reply, qOverload<QNetworkReply::NetworkError>(&QNetworkReply::error) , [=](QNetworkReply::NetworkError error){
qDebug() << reply->error();
});
上面这种上传方式,是先把文件读取到内存中,然后再上传到ftp服务器。假如你本机内存4g,你要上传个8g的文件,估计会出问题。因此可以优化一下,变这样子。
QString ftpPath = "ftp://127.0.0.1";
QString filePath;
filePath = "456.txt";
QFile *file = new QFile(filePath);
file->open(QIODevice::ReadOnly);
QString fileName;
fileName = "abc.txt";
QString m_ftpPath;
m_ftpPath = ftpPath + "/" + fileName;
// 把选中的文件上传到服务器
QUrl mUrl(m_ftpPath);
mUrl.setScheme("ftp"); //不设置这个的话,会报QNetworkReply::ContentAccessDenied
mUrl.setUserName("myName");
mUrl.setPassword("12345");
mUrl.setUrl(m_ftpPath);
QNetworkRequest request(mUrl);
auto reply = mNetMan.put(request, file); //就是这个,传递进来的不是具体的数据,而是文件的指针。
connect(reply, &QNetworkReply::finished, [=](void){
qDebug() << QString::fromUtf8(reply->readAll());
});
connect(reply, qOverload<QNetworkReply::NetworkError>(&QNetworkReply::error) , [=](QNetworkReply::NetworkError error){
qDebug() << reply->error();
});