140 lines
3.8 KiB
C++
140 lines
3.8 KiB
C++
#include "SarUploadDialog.h"
|
|
|
|
#include "saruploaddialog.h"
|
|
#include <QVBoxLayout>
|
|
#include <QHBoxLayout>
|
|
#include <QFormLayout>
|
|
#include <QGroupBox>
|
|
#include <QLabel>
|
|
#include <QFileDialog>
|
|
#include <QMessageBox>
|
|
#include <QHttpMultiPart>
|
|
#include <QUrlQuery>
|
|
#include <QLineEdit>
|
|
#include <QDateTimeEdit>
|
|
#include <QPushButton>
|
|
#include <QNetworkReply>
|
|
|
|
|
|
|
|
SarUploadDialog::SarUploadDialog(QWidget* parent)
|
|
: QDialog(parent),
|
|
networkManager(new QNetworkAccessManager(this))
|
|
{
|
|
setupUi();
|
|
initConnections();
|
|
}
|
|
|
|
SarUploadDialog::~SarUploadDialog()
|
|
{
|
|
// 自动释放Qt对象
|
|
}
|
|
|
|
void SarUploadDialog::setupUi()
|
|
{
|
|
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
|
|
|
// 参数组
|
|
QGroupBox* groupBox = new QGroupBox("Upload Parameters ( * required)");
|
|
QFormLayout* formLayout = new QFormLayout;
|
|
|
|
// dataSource字段
|
|
leFilePath = new QLineEdit;
|
|
btnBrowse = new QPushButton("Browse...");
|
|
QHBoxLayout* fileLayout = new QHBoxLayout;
|
|
fileLayout->addWidget(leFilePath);
|
|
fileLayout->addWidget(btnBrowse);
|
|
formLayout->addRow("dataSource*:", fileLayout);
|
|
|
|
// 其他字段初始化...
|
|
|
|
groupBox->setLayout(formLayout);
|
|
mainLayout->addWidget(groupBox);
|
|
|
|
// 按钮组
|
|
QHBoxLayout* buttonLayout = new QHBoxLayout;
|
|
btnExecute = new QPushButton("Execute");
|
|
btnClear = new QPushButton("Clear");
|
|
btnCancel = new QPushButton("Cancel");
|
|
buttonLayout->addWidget(btnExecute);
|
|
buttonLayout->addWidget(btnClear);
|
|
buttonLayout->addWidget(btnCancel);
|
|
mainLayout->addLayout(buttonLayout);
|
|
}
|
|
|
|
void SarUploadDialog::initConnections()
|
|
{
|
|
connect(btnBrowse, &QPushButton::clicked, this, &SarUploadDialog::onBrowseClicked);
|
|
connect(btnExecute, &QPushButton::clicked, this, &SarUploadDialog::onExecuteClicked);
|
|
connect(btnClear, &QPushButton::clicked, [this]() {
|
|
leFilePath->clear();
|
|
// 清空其他字段...
|
|
});
|
|
connect(btnCancel, &QPushButton::clicked, this, &QDialog::reject);
|
|
}
|
|
|
|
// 文件浏览槽函数
|
|
void SarUploadDialog::onBrowseClicked()
|
|
{
|
|
QString file = QFileDialog::getOpenFileName(this, "Select SAR File");
|
|
if (!file.isEmpty()) leFilePath->setText(file);
|
|
}
|
|
|
|
// 执行上传
|
|
void SarUploadDialog::onExecuteClicked()
|
|
{
|
|
if (!validateInputs()) return;
|
|
|
|
QUrlQuery query;
|
|
query.addQueryItem("dataType", leDataType->text());
|
|
query.addQueryItem("dataname", leDataname->text());
|
|
|
|
QHttpMultiPart* multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
|
|
|
|
// 文件部分
|
|
QHttpPart filePart;
|
|
filePart.setHeader(QNetworkRequest::ContentDispositionHeader,
|
|
QVariant("form-data; name=\"dataSource\"; filename=\""
|
|
+ QFileInfo(leFilePath->text()).fileName() + "\""));
|
|
QFile* file = new QFile(leFilePath->text());
|
|
file->open(QIODevice::ReadOnly);
|
|
filePart.setBodyDevice(file);
|
|
multiPart->append(filePart);
|
|
|
|
QUrl url("http://your-api-domain/api/uploadOpticalSar");
|
|
url.setQuery(query);
|
|
|
|
QNetworkRequest request(url);
|
|
request.setRawHeader("Accept", "application/json");
|
|
|
|
QNetworkReply* reply = networkManager->put(request, multiPart);
|
|
connect(reply, &QNetworkReply::finished, [=]() {
|
|
handleResponse(reply);
|
|
multiPart->deleteLater();
|
|
});
|
|
}
|
|
|
|
// 响应处理
|
|
void SarUploadDialog::handleResponse(QNetworkReply* reply)
|
|
{
|
|
if (reply->error() == QNetworkReply::NoError) {
|
|
QMessageBox::information(this, "Success", "Upload completed successfully");
|
|
}
|
|
else {
|
|
QMessageBox::critical(this, "Error",
|
|
QString("Error %1: %2").arg(reply->error()).arg(reply->errorString()));
|
|
}
|
|
reply->deleteLater();
|
|
}
|
|
|
|
// 输入验证
|
|
bool SarUploadDialog::validateInputs()
|
|
{
|
|
if (leFilePath->text().isEmpty()) {
|
|
QMessageBox::warning(this, "Warning", "dataSource is required!");
|
|
return false;
|
|
}
|
|
// 其他验证逻辑...
|
|
return true;
|
|
}
|