Qt使用ftp

参考:
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();
    });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值