3500/ftpclient.cpp

185 lines
5.9 KiB
C++
Raw Normal View History

2023-04-14 19:30:30 +08:00
#include "ftpclient.h"
#include <QEventLoop>
#include "NetMgr.h"
#include <QJsonArray>
#include <QJsonObject>
#include "global.h"
FtpClient *g_FtpClient = NULL;
FtpClient::FtpClient(QWidget *parent)
: QWidget(parent)
{
m_ftpManager = new QNetworkAccessManager(this);
m_inputFile = NULL;
m_fileName = "";
2023-04-27 19:48:15 +08:00
m_Type = -1;
2023-04-14 19:30:30 +08:00
connect(m_ftpManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));
connect(g_NetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
}
FtpClient::~FtpClient()
{
delete m_ftpManager;
delete m_ftpUrl;
}
void FtpClient::SetUserInfo(const QString userAccount, const QString pwd)
{
m_ftpUrl->setUserName(userAccount);
m_ftpUrl->setPassword(pwd);
}
void FtpClient::SetServerInfo(const QString fileAddr, int Port/* =21 */)
{
2023-04-17 17:40:26 +08:00
m_ftpManager->disconnect(SIGNAL(finished(QNetworkReply*)));
connect(m_ftpManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));
2023-04-27 19:48:15 +08:00
//connect(m_ftpManager, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(CheckReplyStatus(QNetworkReply::NetworkError)));
2023-04-14 19:30:30 +08:00
m_ftpUrl = new QUrl(fileAddr);
m_ftpUrl->setPort(Port);
}
void FtpClient::slotNetMgr(QString sAddr, const QVariant &msg)
{
QJsonObject objec = msg.value<QJsonObject>();
if(objec.contains("cmd"))
{
QJsonValue arrays_value = objec.take("cmd");
2023-04-17 17:40:26 +08:00
qDebug()<<"cmd ="<<arrays_value.toString();
2023-04-14 19:30:30 +08:00
if(arrays_value.toString() == "90" || arrays_value.toString() == "46" )
{
bool Status = objec.take("success").toBool();
QString strMessage = objec.take("message").toString();
if(Status){
2023-04-27 19:48:15 +08:00
sigReplyStatus(1);
2023-04-14 19:30:30 +08:00
QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("保存成功!"));
}else{
QMessageBox::information(this, QStringLiteral("提示"), strMessage);
2023-04-27 19:48:15 +08:00
sigReplyStatus(0);
2023-04-14 19:30:30 +08:00
}
}
}
}
void FtpClient::finished(QNetworkReply* reply)
{
2023-04-27 19:48:15 +08:00
QNetworkReply::NetworkError error = reply->error();
qDebug() << "finished" << error <<endl;
2023-04-14 19:30:30 +08:00
if(m_fileName != ""){
2023-04-17 17:40:26 +08:00
//QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("保存成功!"));
2023-04-14 19:30:30 +08:00
QJsonObject allObj,cmdBody,temp;
QJsonArray tempArray;
2023-04-27 19:48:15 +08:00
if(m_fileName.contains(".json")){
2023-04-14 19:30:30 +08:00
allObj.insert("cmd", "90");
temp["fileName"] = m_fileName;
2023-04-27 19:48:15 +08:00
if(m_Type >= 0)
temp["content"] = m_Type;
2023-04-14 19:30:30 +08:00
tempArray.append(temp);
allObj.insert("cmdBody",tempArray);
2023-04-27 19:48:15 +08:00
}else{
allObj.insert("cmd", "46");
allObj.insert("type", m_Type);
temp["fileName"] = m_fileName;
allObj.insert("cmdBody",temp);
2023-04-14 19:30:30 +08:00
}
qDebug() << allObj << endl;
QNetworkRequest req;
QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP);
req.setUrl(sUrl);
g_NetMgr->PostJson(req,allObj);
m_fileName = "";
2023-04-27 19:48:15 +08:00
m_Type = -1;
2023-04-14 19:30:30 +08:00
//QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("保存成功!"));
}
if(m_inputFile != NULL)
{
m_inputFile->write(reply->readAll());
m_inputFile->flush();
m_inputFile->close();
delete m_inputFile;
m_inputFile = NULL;
reply->deleteLater();
return;
}
reply->deleteLater();
}
void FtpClient::CheckReplyStatus(QNetworkReply::NetworkError inputError)
{
qDebug() << "inputError" << inputError << endl;
switch(inputError)
{
case QNetworkReply::NoError:
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("文件上传成功"));
break;
case QNetworkReply::HostNotFoundError:
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("服务器名称不合理"));
break;
case QNetworkReply::ConnectionRefusedError:
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("服务器拒绝连接"));
break;
case QNetworkReply::RemoteHostClosedError:
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("服务器已关闭"));
break;
default:
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("异常错误"));
break;
}
}
2023-04-27 19:48:15 +08:00
void FtpClient::UpLoadFile(const QString fileSource, const QString fileName,int type)
2023-04-14 19:30:30 +08:00
{
if(fileSource.isEmpty())
{
return;
}
m_fileName = fileName;
2023-04-27 19:48:15 +08:00
m_Type = type;
2023-04-14 19:30:30 +08:00
QFile file(fileSource);
if(!file.exists())
{
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("上传的文件不存在"));
return;
}
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll(); //转化编码
//QString result = QString::fromLatin1(fileDest.toStdString().c_str());
//m_ftpUrl->setPath(result);
QNetworkReply* reply = m_ftpManager->put(QNetworkRequest(*m_ftpUrl), data);
2023-04-27 19:48:15 +08:00
//connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(CheckReplyStatus(QNetworkReply::NetworkError)));
2023-04-14 19:30:30 +08:00
QEventLoop loop;
2023-04-27 19:48:15 +08:00
//connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
2023-04-14 19:30:30 +08:00
loop.exec();
reply->deleteLater();
file.close();
}
void FtpClient::DownLoad(const QString fileSource, const QString fileDest)
{
if(fileSource.isEmpty() || fileDest.isEmpty())
{
return;
}
QFileInfo info;
info.setFile(fileDest);
m_inputFile = new QFile(info.filePath());
m_inputFile->open(QIODevice::WriteOnly | QIODevice::Truncate);
QString result = QString::fromLatin1(fileSource.toStdString().c_str());//转化编码
m_ftpUrl->setPath(result);
QNetworkReply* reply = m_ftpManager->get(QNetworkRequest(*m_ftpUrl));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(CheckReplyStatus(QNetworkReply::NetworkError)));
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
}