@Paul-Colby : Thanks
Modified to code (with the help of chatgpt) to handle redirection, here is the updated version:
void HTTP::UploadFile(QString URL, QString PathToFile)
{
QFileInfo FilePath{PathToFile};
// Check to see if the file exists before uploading
if (!FilePath.isFile()) {
qDebug() << FilePath.fileName() << " doesn't exist";
return;
}
// Create the QHttpMultiPart for file upload
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
// Create the QHttpPart for file data
QHttpPart dataPart;
dataPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application"));
dataPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=file; filename=\"" + FilePath.fileName() + "\""));
QFile *file = new QFile(FilePath.absoluteFilePath());
file->open(QIODevice::ReadOnly);
dataPart.setBodyDevice(file);
file->setParent(multiPart);
multiPart->append(dataPart);
// Create the QNetworkRequest for uploading
QNetworkRequest uploadRequest;
uploadRequest.setUrl(QUrl(URL));
// Perform a HEAD request to check for redirection
uploadRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, false);
QNetworkReply *headReply = UploadManager.head(uploadRequest);
connect(headReply, &QNetworkReply::finished, [this, headReply, URL, multiPart, uploadRequest]() {
QVariant redirectUrl = headReply->attribute(QNetworkRequest::RedirectionTargetAttribute);
if (redirectUrl.isValid()) {
// Redirection is implemented
qDebug() << "Server has implemented redirection. Redirect URL: " << redirectUrl.toUrl();
// Clean up the reply
headReply->deleteLater();
// Post the request to the redirected URL
QNetworkRequest redirectRequest(redirectUrl.toUrl());
QNetworkReply *redirectReply = UploadManager.post(redirectRequest, multiPart);
multiPart->setParent(redirectReply);
} else {
// No redirection, proceed with the POST request
QNetworkReply *reply = UploadManager.post(uploadRequest, multiPart);
multiPart->setParent(reply);
}
});
}
Works as expected.