#include "SaveMode.h" #include #include bool SaveMode::uploadFile() { /** you can choose any zip file of size 3-4 Mb. Just incase if server indicates that authenticationKey is wrong, please comment me for a new one. This code runs in MacOsX already but not on windows 10. */ QString filename="test.zip"; QUrl serviceUrl = QUrl("http://woden-api.mvm-test.com/boschar/ProductQR/Create"); QString authenticationKey="eyJJZCI6MSwiU2l0ZUlkIjoxLCJCcmFuZElkIjoyLCJTaXRlTmFtZSI6IkJvc2NoIEFSIiwiVXNlck5hbWUiOiJib3NjaGFyIiwiUGFzc3dvcmQiOiIxMjMiLCJDdWx0dXJlSW5mbyI6IlRSIiwiVXJsQWxpYXMiOiJib3NjaGFyIiwiRGF0ZSI6IjIwMTctMDEtMjRUMjM6NTI6MTUuMDE5MDczNCswMzowMCJ9"; QErrorMessage msg; QFile *file=new QFile(filename); if(!file->open(QIODevice::ReadOnly| QIODevice::Unbuffered)) { msg.showMessage("File is not found upload is unsuccesfull"); msg.exec(); return false; } uploadProgressBar = new QProgressDialog("Uploading file...", "cancel", 0, 100); QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); QHttpPart productIDpart; productIDpart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"ProductId\"")); productIDpart.setBody("123"); multiPart->append(productIDpart); QHttpPart versionPart; versionPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"Version\"")); versionPart.setBody("100"); multiPart->append(versionPart); QHttpPart filePart; filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/zip")); filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"File\";filename=\"test.zip\" ")); filePart.setBodyDevice(file); file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart multiPart->append(filePart); QHttpPart descriptionPart; descriptionPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"Description\"")); descriptionPart.setBody("some description"); multiPart->append(descriptionPart); QNetworkAccessManager *manager =new QNetworkAccessManager(); QNetworkRequest request(serviceUrl); request.setRawHeader( "AuthenticationKey",authenticationKey.toUtf8()); QEventLoop eventLoop; QNetworkReply *reply = manager->post(request, multiPart); connect(uploadProgressBar, SIGNAL(canceled()),reply,SLOT(abort())); connect(reply, SIGNAL(uploadProgress(qint64, qint64)),this,SLOT(uploadProgress(qint64, qint64))); connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit())); connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(error(QNetworkReply::NetworkError))); connect(reply, SIGNAL(sslErrors(const QList)), this, SLOT(error(const QList))); connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),&eventLoop, SLOT(quit())); connect(reply, SIGNAL(sslErrors(const QList)), &eventLoop, SLOT(quit())); multiPart->setParent(reply); // delete the multiPart with the reply eventLoop.exec(); if (reply->error() == QNetworkReply::NoError) { QString strReply = (QString)reply->readAll(); //parse json qDebug() << "Response:" << strReply; QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8()); QJsonObject jsonObj = jsonResponse.object(); QJsonObject result=jsonObj["result"].toObject(); if(jsonObj["error"].toBool()==false) { QJsonObject data=result["data"].toObject(); QrLink=data["QrLink"].toString(); QMessageBox msgBox; msgBox.setText("Upload successfull"); msgBox.exec(); } else { QErrorMessage msg; msg.showMessage("Error:There was a problem during upload."); msg.exec(); } delete reply; } else { QErrorMessage msg; int errCode = reply->error(); msg.showMessage("Error:Upload couldn't be started,error code:"+ QString::number(errCode)); msg.exec(); } return true; } void SaveMode::error(const QList &errors) { qDebug() << errors; } void SaveMode::error(QNetworkReply::NetworkError error) { qDebug() << error; } void SaveMode::uploadProgress(qint64 a, qint64 b) { if (b > 0) { float per=100*a/b; uploadProgressBar->setValue(per); qDebug() << "Uploading " << a << "/" << b << "%" << per; qApp->processEvents(); } }