QT将图片上传至10.190.21.11端口 为21 用户名为adc 密码为123 的ftp 服务器上 如果图片父路径不存在则创建
时间: 2023-12-06 15:45:15 浏览: 25
可以使用Qt自带的网络模块QNetworkAccessManager来实现上传图片到FTP服务器的功能。
首先需要在Qt工程文件中添加网络模块的依赖,可以在.pro文件中添加:
```
QT += network
```
然后可以使用以下代码实现上传图片的功能:
```cpp
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QFile>
#include <QFileInfo>
#include <QIODevice>
void uploadImageToFTP(const QString& imagePath) {
QUrl ftpUrl("ftp://10.190.21.11:21");
ftpUrl.setUserName("adc");
ftpUrl.setPassword("123");
// 获取图片信息
QFileInfo fileInfo(imagePath);
QString fileName = fileInfo.fileName();
QString parentPath = fileInfo.path();
// 创建上传目录
QNetworkAccessManager manager;
QNetworkReply* reply = manager.get(QNetworkRequest(ftpUrl));
QEventLoop loop;
QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
if (reply->error() == QNetworkReply::NoError) {
QByteArray data = reply->readAll();
if (!data.contains(parentPath.toUtf8())) {
QUrl createDirUrl(ftpUrl);
createDirUrl.setPath(parentPath);
QNetworkReply* createDirReply = manager.mkcol(QNetworkRequest(createDirUrl));
QObject::connect(createDirReply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
}
}
reply->deleteLater();
// 上传图片
QFile file(imagePath);
file.open(QIODevice::ReadOnly);
QNetworkRequest request(QUrl::fromUserInput(ftpUrl.toString() + "/" + fileName));
QNetworkReply* uploadReply = manager.put(request, &file);
QObject::connect(uploadReply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
uploadReply->deleteLater();
}
```
该函数接受一个图片路径作为参数,会将图片上传到FTP服务器上对应的路径。其中,首先通过QNetworkAccessManager发送一个GET请求,获取FTP服务器上的目录信息,如果目标路径不存在,则通过QNetworkAccessManager发送一个MKCOL请求创建目录。然后使用QNetworkAccessManager发送一个PUT请求上传图片。
使用该函数可以实现将图片上传到FTP服务器的功能,调用方式如下:
```cpp
uploadImageToFTP("/path/to/image.jpg");
```