[草稿]Qt的FTP上传下载以及HTTP上传下载

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: [草稿]Qt的FTP上传下载以及HTTP上传下载

Qt的FTP上传下载相关代码:

//初始化ftp
ftp = new QFtp(this);
ftp->connectToHost(SERVERIP);
ftp->login(USERNAME, PASSWORD);
//命令开始执行时
connect(ftp, SIGNAL(commandStarted(int)), this, SLOT(ftpCommandStarted(int)));
//当每条命令开始执行时发出相应的信号
connect(ftp, SIGNAL(commandFinished(int, bool)), this, SLOT(ftpCommandFinished(int, bool)));

对应的处理方法:

//命令开始执行时
void mainwidget::ftpCommandStarted(int) {
    if(ftp->currentCommand() == QFtp::ConnectToHost){
        //QMessageBox::critical(0, "ftp连接状态", "正在连接到服务器...", QMessageBox::Cancel);
        qDebug() << "正在连接到服务器...";
    }
    if (ftp->currentCommand() == QFtp::Login){
        //ui.label->setText(tr("正在登录…"));
        qDebug() << "正在登录...";
    }
    if (ftp->currentCommand() == QFtp::Get){
        //ui.label->setText(tr("正在下载…"));
        qDebug() << "正在下载...";
    } else if (ftp->currentCommand() == QFtp::Close){
        //ui.label->setText(tr("正在关闭连接…"));
        qDebug() << "正在关闭连接...";
    }
}

 

//命令执行
void mainwidget::ftpCommandFinished(int, bool error) {
    if (ftp->currentCommand() == QFtp::ConnectToHost) {
        if (error) {
            //ui.label->setText(tr("连接服务器出现错误:%1").arg(ftp->errorString() ));
            qDebug() << tr("连接服务器出现错误:%1").arg(ftp->errorString());

            //QMessageBox::critical(0, "FTP连接错误", tr("连接服务器出现错误:%1").arg(ftp->errorString()), QMessageBox::Cancel);

        } else {
            //ui.label->setText(tr("连接到服务器成功"));
            qDebug() << tr("连接到服务器成功");
        }
    }
    if (ftp->currentCommand() == QFtp::Login) {
        if (error) {
            //ui.label->setText(tr("登录出现错误:%1").arg(ftp->errorString()));
            qDebug() << tr("登录出现错误:%1").arg(ftp->errorString());
            //QMessageBox::critical(0, "FTP连接错误", tr("登录出现错误:%1").arg(ftp->errorString()), QMessageBox::Cancel);
        } else {
            //ui.label->setText(tr("登录成功"));
            qDebug() << tr("登录成功");
        }
    }
    if (ftp->currentCommand() == QFtp::Put) {
        if (error) {
            //ui.label->setText(tr("上传出现错误:%1").arg(ftp->errorString()));
            //ui.textEdit->setText(tr("上传出现错误:%1").arg(ftp->errorString()));
            qDebug() << tr("上传出现错误:%1").arg(ftp->errorString());
            QMessageBox::critical(0, "FTP连接错误", tr("上传出现错误:%1").arg(ftp->errorString()), QMessageBox::Cancel);
        } else {
            //ui.label->setText(tr("已经完成上传"));
            qDebug() << tr("已经完成上传");
        }
    }
    if (ftp->currentCommand() == QFtp::Get) {
        if(error) {
            //ui.textEdit->setText(tr("下载出现错误:%1").arg(ftp->errorString()));
            qDebug() << tr("下载出现错误:%1").arg(ftp->errorString());
            QMessageBox::critical(0, "FTP连接错误", tr("下载出现错误:%1").arg(ftp->errorString()), QMessageBox::Cancel);
        } else {
            //ui.label->setText(tr("已经完成下载"));
            qDebug() << tr("已经完成下载");
        }
    } else if (ftp->currentCommand() == QFtp::Close) {
        //ui.label->setText(tr("已经关闭连接"));
        qDebug() << tr("已经关闭连接");
    }
}

 

 

具体调用:

QString path = QCoreApplication::applicationDirPath();
    QFile *uploadFile = new QFile(path + "/addr.xml");
    QString des = "addr.xml";
    uploadFile->open(QIODevice::ReadWrite);
    int icd = ftp->cd("/index/sjpc/");
    int iput = ftp->put(uploadFile, des);
    qDebug() << "upload finished!\n" << icd << ", " << iput;

HTTP上传:

参考:

http://blog.163.com/charlie-lei@126/blog/static/11374392420108297578992/

http://blog.csdn.net/songjinshi/article/details/11806773

核心代码:

//上传
    QNetworkAccessManager *_uploadManager;
    QNetworkReply *_reply;
    char* m_buf;

...

	_uploadManager = new QNetworkAccessManager(this);
    connect(_uploadManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyUploadFinished(QNetworkReply*)));
    m_buf = NULL;

...

	/*http上传*/
    QString path = QCoreApplication::applicationDirPath();
    QFile file(path + "/addr.xml");
    if (!file.open(QIODevice::ReadOnly)) {
        QMessageBox::critical(0, "Cannot Upload Configure File", "Please check the configure file!", QMessageBox::Cancel);
    } else {
        int file_len = file.size();

        QDataStream in(&file);
        m_buf = new char[file_len];
        in.readRawData(m_buf, file_len);
        file.close();

        QNetworkRequest request(QUrl("http://www.sensikeji.com/sjpc/upload.php?filename=addr.xml"));
        request.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream");
        QByteArray arr = QByteArray(m_buf, file_len);
        _reply = _uploadManager->post(request , arr);
        connect(_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(upLoadError(QNetworkReply::NetworkError)));
    }
原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: [草稿]Qt的FTP上传下载以及HTTP上传下载

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: