mirror of
https://github.com/zhuzichu520/FluentUI.git
synced 2024-11-27 05:38:37 +08:00
update network
This commit is contained in:
parent
d485ec9e3b
commit
2242ffc367
@ -1,5 +1,4 @@
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
import Qt.labs.platform
|
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import QtQuick.Window
|
import QtQuick.Window
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
@ -340,6 +339,50 @@ FluContentPage{
|
|||||||
.go(callable)
|
.go(callable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FluProgressButton{
|
||||||
|
id:btn_upload
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Upload File"
|
||||||
|
onClicked: {
|
||||||
|
file_dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluNetworkCallable{
|
||||||
|
id:callable_upload_file
|
||||||
|
onStart: {
|
||||||
|
btn_upload.disabled = true
|
||||||
|
}
|
||||||
|
onFinish: {
|
||||||
|
btn_upload.disabled = false
|
||||||
|
}
|
||||||
|
onError:
|
||||||
|
(status,errorString,result)=>{
|
||||||
|
btn_upload.progress = 0
|
||||||
|
text_info.text = result
|
||||||
|
console.debug(result)
|
||||||
|
}
|
||||||
|
onSuccess:
|
||||||
|
(result)=>{
|
||||||
|
text_info.text = result
|
||||||
|
}
|
||||||
|
onUploadProgress:
|
||||||
|
(sent,total)=>{
|
||||||
|
btn_upload.progress = sent/total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDialog {
|
||||||
|
id: file_dialog
|
||||||
|
onAccepted: {
|
||||||
|
FluNetwork.postForm("https://httpbingo.org/post")
|
||||||
|
.setRetry(0)//请求失败后不重复请求
|
||||||
|
.add("accessToken","12345678")
|
||||||
|
.addFile("file",FluTools.toLocalPath(file_dialog.selectedFile))
|
||||||
|
.go(callable_upload_file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ NetworkCallable::NetworkCallable(QObject *parent):QObject{parent}{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QString NetworkParams::method2String(){
|
QString NetworkParams::method2String(){
|
||||||
switch (_method) {
|
switch (_method) {
|
||||||
case METHOD_GET:
|
case METHOD_GET:
|
||||||
@ -49,6 +48,18 @@ int NetworkParams::getRetry(){
|
|||||||
return FluNetwork::getInstance()->retry();
|
return FluNetwork::getInstance()->retry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DownloadParam::DownloadParam(QObject *parent)
|
||||||
|
: QObject{parent}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
DownloadParam::DownloadParam(QString destPath,bool append,QObject *parent)
|
||||||
|
: QObject{parent}
|
||||||
|
{
|
||||||
|
this->_destPath = destPath;
|
||||||
|
this->_append = append;
|
||||||
|
}
|
||||||
|
|
||||||
NetworkParams::NetworkParams(QObject *parent)
|
NetworkParams::NetworkParams(QObject *parent)
|
||||||
: QObject{parent}
|
: QObject{parent}
|
||||||
{
|
{
|
||||||
@ -102,6 +113,11 @@ NetworkParams* NetworkParams::setCacheMode(int val){
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NetworkParams* NetworkParams::toDownload(QString destPath,bool append){
|
||||||
|
_downloadParam = new DownloadParam(destPath,append,this);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
QString NetworkParams::buildCacheKey(){
|
QString NetworkParams::buildCacheKey(){
|
||||||
QJsonObject obj;
|
QJsonObject obj;
|
||||||
obj.insert("url",_url);
|
obj.insert("url",_url);
|
||||||
@ -110,13 +126,18 @@ QString NetworkParams::buildCacheKey(){
|
|||||||
obj.insert("query",QString(QJsonDocument::fromVariant(_queryMap).toJson(QJsonDocument::Compact)));
|
obj.insert("query",QString(QJsonDocument::fromVariant(_queryMap).toJson(QJsonDocument::Compact)));
|
||||||
obj.insert("param",QString(QJsonDocument::fromVariant(_paramMap).toJson(QJsonDocument::Compact)));
|
obj.insert("param",QString(QJsonDocument::fromVariant(_paramMap).toJson(QJsonDocument::Compact)));
|
||||||
obj.insert("header",QString(QJsonDocument::fromVariant(_headerMap).toJson(QJsonDocument::Compact)));
|
obj.insert("header",QString(QJsonDocument::fromVariant(_headerMap).toJson(QJsonDocument::Compact)));
|
||||||
|
obj.insert("file",QString(QJsonDocument::fromVariant(_fileMap).toJson(QJsonDocument::Compact)));
|
||||||
QByteArray data = QJsonDocument(obj).toJson(QJsonDocument::Compact);
|
QByteArray data = QJsonDocument(obj).toJson(QJsonDocument::Compact);
|
||||||
return QCryptographicHash::hash(data, QCryptographicHash::Sha256).toHex();
|
return QCryptographicHash::hash(data, QCryptographicHash::Sha256).toHex();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkParams::go(NetworkCallable* callable){
|
void NetworkParams::go(NetworkCallable* callable){
|
||||||
|
if(_downloadParam){
|
||||||
|
FluNetwork::getInstance()->handleDownload(this,callable);
|
||||||
|
}else{
|
||||||
FluNetwork::getInstance()->handle(this,callable);
|
FluNetwork::getInstance()->handle(this,callable);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FluNetwork::handle(NetworkParams* params,NetworkCallable* c){
|
void FluNetwork::handle(NetworkParams* params,NetworkCallable* c){
|
||||||
QString cacheKey = params->buildCacheKey();
|
QString cacheKey = params->buildCacheKey();
|
||||||
@ -148,7 +169,7 @@ void FluNetwork::handle(NetworkParams* params,NetworkCallable* c){
|
|||||||
connect(manager,&QNetworkAccessManager::finished,this,[this,params,request,callable,manager,times,cacheKey](QNetworkReply *reply){
|
connect(manager,&QNetworkAccessManager::finished,this,[this,params,request,callable,manager,times,cacheKey](QNetworkReply *reply){
|
||||||
if(reply->error() != QNetworkReply::NoError && *times < params->getRetry()) {
|
if(reply->error() != QNetworkReply::NoError && *times < params->getRetry()) {
|
||||||
(*times)++;
|
(*times)++;
|
||||||
sendRequest(manager,request,params,reply);
|
sendRequest(manager,request,params,reply,callable);
|
||||||
} else {
|
} else {
|
||||||
QString response = QString::fromUtf8(reply->readAll());
|
QString response = QString::fromUtf8(reply->readAll());
|
||||||
QNetworkReply::NetworkError error = reply->error();
|
QNetworkReply::NetworkError error = reply->error();
|
||||||
@ -178,7 +199,11 @@ void FluNetwork::handle(NetworkParams* params,NetworkCallable* c){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sendRequest(manager,request,params,reply);
|
sendRequest(manager,request,params,reply,callable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FluNetwork::handleDownload(NetworkParams* params,NetworkCallable* result){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString FluNetwork::readCache(const QString& key){
|
QString FluNetwork::readCache(const QString& key){
|
||||||
@ -207,7 +232,7 @@ QString FluNetwork::getCacheFilePath(const QString& key){
|
|||||||
return cacheDir.absoluteFilePath(key);
|
return cacheDir.absoluteFilePath(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FluNetwork::sendRequest(QNetworkAccessManager* manager,QNetworkRequest request,NetworkParams* params,QNetworkReply*& reply){
|
void FluNetwork::sendRequest(QNetworkAccessManager* manager,QNetworkRequest request,NetworkParams* params,QNetworkReply*& reply,QPointer<NetworkCallable> callable){
|
||||||
if(reply){
|
if(reply){
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
}
|
}
|
||||||
@ -223,8 +248,28 @@ void FluNetwork::sendRequest(QNetworkAccessManager* manager,QNetworkRequest requ
|
|||||||
part.setBody(each.second.toByteArray());
|
part.setBody(each.second.toByteArray());
|
||||||
multiPart->append(part);
|
multiPart->append(part);
|
||||||
}
|
}
|
||||||
|
for (const auto& each : params->_fileMap.toStdMap())
|
||||||
|
{
|
||||||
|
QString filePath = each.second.toString();
|
||||||
|
QString name = each.first;
|
||||||
|
QFile *file = new QFile(filePath);
|
||||||
|
QString fileName = QFileInfo(filePath).fileName();
|
||||||
|
file->open(QIODevice::ReadOnly);
|
||||||
|
file->setParent(multiPart);
|
||||||
|
QHttpPart part;
|
||||||
|
part.setHeader(QNetworkRequest::ContentDispositionHeader, QString("form-data; name=\"%1\"; filename=\"%2\"").arg(name,fileName));
|
||||||
|
part.setBodyDevice(file);
|
||||||
|
multiPart->append(part);
|
||||||
|
}
|
||||||
reply = manager->sendCustomRequest(request,verb,multiPart);
|
reply = manager->sendCustomRequest(request,verb,multiPart);
|
||||||
multiPart->setParent(reply);
|
multiPart->setParent(reply);
|
||||||
|
if(!params->_fileMap.isEmpty()){
|
||||||
|
connect(reply,&QNetworkReply::uploadProgress,reply,[callable](qint64 bytesSent, qint64 bytesTotal){
|
||||||
|
if(!callable.isNull() && bytesSent!=0 && bytesTotal!=0){
|
||||||
|
callable->uploadProgress(bytesSent,bytesTotal);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NetworkParams::TYPE_JSON:{
|
case NetworkParams::TYPE_JSON:{
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "singleton.h"
|
#include "singleton.h"
|
||||||
|
|
||||||
|
|
||||||
class NetworkCallable : public QObject{
|
class NetworkCallable : public QObject{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
QML_NAMED_ELEMENT(FluNetworkCallable)
|
QML_NAMED_ELEMENT(FluNetworkCallable)
|
||||||
@ -21,6 +20,18 @@ public:
|
|||||||
Q_SIGNAL void error(int status,QString errorString,QString result);
|
Q_SIGNAL void error(int status,QString errorString,QString result);
|
||||||
Q_SIGNAL void success(QString result);
|
Q_SIGNAL void success(QString result);
|
||||||
Q_SIGNAL void cache(QString result);
|
Q_SIGNAL void cache(QString result);
|
||||||
|
Q_SIGNAL void uploadProgress(qint64 sent, qint64 total);
|
||||||
|
Q_SIGNAL void downloadProgress(qint64 recv, qint64 total);
|
||||||
|
};
|
||||||
|
|
||||||
|
class DownloadParam : public QObject{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit DownloadParam(QObject *parent = nullptr);
|
||||||
|
DownloadParam(QString destPath,bool append,QObject *parent = nullptr);
|
||||||
|
public:
|
||||||
|
QString _destPath;
|
||||||
|
bool _append;
|
||||||
};
|
};
|
||||||
|
|
||||||
class NetworkParams : public QObject
|
class NetworkParams : public QObject
|
||||||
@ -53,12 +64,14 @@ public:
|
|||||||
Q_INVOKABLE NetworkParams* setTimeout(int val);
|
Q_INVOKABLE NetworkParams* setTimeout(int val);
|
||||||
Q_INVOKABLE NetworkParams* setRetry(int val);
|
Q_INVOKABLE NetworkParams* setRetry(int val);
|
||||||
Q_INVOKABLE NetworkParams* setCacheMode(int val);
|
Q_INVOKABLE NetworkParams* setCacheMode(int val);
|
||||||
|
Q_INVOKABLE NetworkParams* toDownload(QString destPath,bool append);
|
||||||
Q_INVOKABLE void go(NetworkCallable* result);
|
Q_INVOKABLE void go(NetworkCallable* result);
|
||||||
QString buildCacheKey();
|
QString buildCacheKey();
|
||||||
QString method2String();
|
QString method2String();
|
||||||
int getTimeout();
|
int getTimeout();
|
||||||
int getRetry();
|
int getRetry();
|
||||||
public:
|
public:
|
||||||
|
DownloadParam* _downloadParam = nullptr;
|
||||||
Method _method;
|
Method _method;
|
||||||
Type _type;
|
Type _type;
|
||||||
QString _url;
|
QString _url;
|
||||||
@ -104,8 +117,9 @@ public:
|
|||||||
Q_INVOKABLE NetworkParams* patchJsonArray(const QString& url);
|
Q_INVOKABLE NetworkParams* patchJsonArray(const QString& url);
|
||||||
Q_INVOKABLE NetworkParams* deleteJsonArray(const QString& url);
|
Q_INVOKABLE NetworkParams* deleteJsonArray(const QString& url);
|
||||||
void handle(NetworkParams* params,NetworkCallable* result);
|
void handle(NetworkParams* params,NetworkCallable* result);
|
||||||
|
void handleDownload(NetworkParams* params,NetworkCallable* result);
|
||||||
private:
|
private:
|
||||||
void sendRequest(QNetworkAccessManager* manager,QNetworkRequest request,NetworkParams* params,QNetworkReply*& reply);
|
void sendRequest(QNetworkAccessManager* manager,QNetworkRequest request,NetworkParams* params,QNetworkReply*& reply,QPointer<NetworkCallable> callable);
|
||||||
void addQueryParam(QUrl* url,const QMap<QString, QVariant>& params);
|
void addQueryParam(QUrl* url,const QMap<QString, QVariant>& params);
|
||||||
void addHeaders(QNetworkRequest* request,const QMap<QString, QVariant>& headers);
|
void addHeaders(QNetworkRequest* request,const QMap<QString, QVariant>& headers);
|
||||||
void saveResponse(QString key,QString response);
|
void saveResponse(QString key,QString response);
|
||||||
|
Loading…
Reference in New Issue
Block a user