tchttpservice.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. #include "tchttpservice.h"
  2. QScopedPointer<TCHttpService> TCHttpService::m_instance;
  3. TCHttpService *TCHttpService::getInstance()
  4. {
  5. if (m_instance.isNull()) {
  6. m_instance.reset(new TCHttpService);
  7. }
  8. return m_instance.data();
  9. }
  10. void TCHttpService::apiLogin()
  11. {
  12. QByteArray pwdMd5 = QCryptographicHash::hash(m_firstPwd.toUtf8(), QCryptographicHash::Md5);
  13. QString md5Hex = pwdMd5.toHex();
  14. QString urlStr;
  15. // if (m_enableSsl)
  16. urlStr = "https://" + m_domain + "/api/login";
  17. // else
  18. // urlStr = "http://" + m_domain + "/api/login";
  19. QUrl url(urlStr);
  20. QJsonObject jsonObj;
  21. jsonObj["user"]="test1";
  22. jsonObj["pwd"]=md5Hex;
  23. QJsonDocument jsonDoc(jsonObj);
  24. QByteArray jsonData = jsonDoc.toJson();
  25. QMap<QString, QString> headers;
  26. headers.insert("Content-Type", "application/json");
  27. QNetworkReply* reply = nullptr;
  28. // qDebug() <<url;
  29. // QNetworkRequest request(url);
  30. // reply = m_manager.post(request, jsonData);
  31. // QObject::connect(reply, &QNetworkReply::finished, [this, reply]() {
  32. // emit requestFinished(reply);
  33. // });
  34. Post(url, headers, {}, jsonData, 1);
  35. }
  36. void TCHttpService::apiMyfileCount()
  37. {
  38. QString urlStr;
  39. if (m_enableSsl)
  40. urlStr = "https://" + m_domain + "/api/myfiles";
  41. else
  42. urlStr = "http://" + m_domain + "/api/myfiles";
  43. QMap<QString, QString> headers;
  44. headers.insert("Content-Type", "application/json");
  45. QString bodyStr = QString("\"%1\":\"%2\",\"%3\":\"%4\"").arg("token").arg(m_token).arg("user").arg(m_userName);
  46. QMap<QString, QString> params;
  47. params.insert("cmd", "count");
  48. // QNetworkReply* reply = Post(urlStr, headers, params, bodyStr.toUtf8());
  49. // QObject::connect(reply, &QNetworkReply::finished, [this, reply]{
  50. // QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());
  51. // QJsonObject jsonObj = jsonDoc.object();
  52. // int code = jsonObj["code"].toInt();
  53. // if (code == 0) {
  54. // int total = jsonObj["total"].toInt();
  55. // this->m_total = total;
  56. // }
  57. // reply->deleteLater();
  58. // });
  59. }
  60. void TCHttpService::apiMyfileNormal()
  61. {
  62. QString urlStr;
  63. if (m_enableSsl)
  64. urlStr = "https://" + m_domain + "/api/myfiles";
  65. else
  66. urlStr = "http://" + m_domain + "/api/myfiles";
  67. QMap<QString, QString> headers;
  68. headers.insert("Content-Type", "application/json");
  69. QMap<QString, QString> params;
  70. params.insert("cmd", "normal");
  71. QString bodyStr = QString("\"%1\":\"%2\",\"%3\":\"%4\",\"%5\":\"%6\",\"%7\":\"%8\"").arg("token").arg(m_token).
  72. arg("user").arg(m_userName).arg("count").arg(m_total).arg("start").arg(0);
  73. // QNetworkReply* reply = Post(QUrl(urlStr), headers, params, bodyStr.toUtf8());
  74. // QObject::connect(reply, &QNetworkReply::finished, [this, reply]{
  75. // QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());
  76. // QJsonObject jsonObj = jsonDoc.object();
  77. // int code = jsonObj["code"].toInt();
  78. // if (code == 0) {
  79. // int count = jsonObj["count"].toInt();
  80. // if (count != 0) {
  81. // QJsonArray array = jsonObj["files"].toArray();
  82. // for (const QJsonValue& value : array) {
  83. // QJsonObject item = value.toObject();
  84. // updateFileMap(item);
  85. // }
  86. // }
  87. // }
  88. // reply->deleteLater();
  89. // });
  90. }
  91. void TCHttpService::apiMd5(const QString& filePath)
  92. {
  93. QFile file(filePath);
  94. if (!file.open(QIODevice::ReadOnly)) {
  95. return;
  96. }
  97. QByteArray fileMd5;
  98. QCryptographicHash hash(QCryptographicHash::Md5);
  99. if (hash.addData(&file)) {
  100. fileMd5 = hash.result().toHex();
  101. }
  102. else
  103. return;
  104. QString urlStr;
  105. if (m_enableSsl)
  106. urlStr = "https://" + m_domain + "/api/md5";
  107. else
  108. urlStr = "http://" + m_domain + "/api/md5";
  109. QMap<QString, QString> headers;
  110. headers.insert("Content-Type", "application/json");
  111. QString md5Str = QString::fromUtf8(fileMd5);
  112. QString bodyStr = QString("\"%1\":\"%2\",\"%3\":\"%4\",\"%5\":\"%6\",\"%7\":\"%8\"").arg("token").arg(m_token).
  113. arg("md5").arg(md5Str).arg("filename").arg(QFileInfo(file).fileName()).arg("user").arg(m_userName);
  114. file.close();
  115. // QNetworkReply* reply = Post(urlStr, headers, {}, bodyStr.toUtf8());
  116. // QObject::connect(reply, &QNetworkReply::finished, [this, reply, filePath, md5Str]{
  117. // QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());
  118. // QJsonObject jsonObj = jsonDoc.object();
  119. // int code = jsonObj["code"].toInt();
  120. // switch (code) {
  121. // case 0:
  122. // break;
  123. // case 1:
  124. // apiUpload(filePath, md5Str);
  125. // break;
  126. // }
  127. // });
  128. }
  129. void TCHttpService::apiUpload(const QString &filePath, const QString &md5Str)
  130. {
  131. QString urlStr;
  132. if (m_enableSsl)
  133. urlStr = "https://" + m_domain + "/api/upload";
  134. else
  135. urlStr = "http://" + m_domain + "/api/upload";
  136. QFile file(filePath);
  137. QFileInfo info(file);
  138. QHttpMultiPart* multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
  139. QHttpPart filePart;
  140. QString contentTypeStrFile = QString("form-data; name=\"file\"; filename=\"%1\"").arg(info.fileName());
  141. filePart.setHeader(QNetworkRequest::ContentDispositionHeader,
  142. QVariant(contentTypeStrFile));
  143. filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/octet-stream"));
  144. if (!file.open(QIODevice::ReadOnly)) {
  145. return;
  146. }
  147. filePart.setBodyDevice(&file);
  148. file.setParent(multiPart);
  149. multiPart->append(filePart);
  150. QHttpPart userPart;
  151. QString contentTypeStrUser = QString("form-data; name=\"user\"");
  152. userPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(contentTypeStrUser));
  153. userPart.setBody(m_userName.toUtf8());
  154. multiPart->append(userPart);
  155. QHttpPart md5Part;
  156. QString contentTypeStrMd5 = QString("form-data; name=\"md5\"");
  157. md5Part.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(contentTypeStrMd5));
  158. md5Part.setBody(md5Str.toUtf8());
  159. multiPart->append(md5Part);
  160. QHttpPart sizePart;
  161. QString contentTypeStrSize = QString("form-data; name=\"size\"");
  162. sizePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(contentTypeStrSize));
  163. sizePart.setBody(QString::number(info.size()).toUtf8());
  164. multiPart->append(sizePart);
  165. QUrl url(urlStr);
  166. QNetworkRequest request(url);
  167. QNetworkReply* reply = m_manager.post(request, multiPart);
  168. multiPart->setParent(reply);
  169. QObject::connect(reply, &QNetworkReply::finished, [this, reply]{
  170. QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());
  171. QJsonObject jsonObj = jsonDoc.object();
  172. int code = jsonObj["code"].toInt();
  173. if (code == 0) {
  174. emit signal_uploadSuc();
  175. }
  176. reply->deleteLater();
  177. });
  178. }
  179. void TCHttpService::apiSharePicShare(const QString &fileName, const QString &md5)
  180. {
  181. QString urlStr;
  182. if (m_enableSsl)
  183. urlStr = "https://" + m_domain + "/api/sharepic";
  184. else
  185. urlStr = "http://" + m_domain + "/api/sharepic";
  186. QMap<QString, QString> headers;
  187. QMap<QString, QString> body;
  188. QMap<QString, QString> params;
  189. headers.insert("Content-Type", "application/json");
  190. QString bodyStr = QString("\"%1\":\"%2\",\"%3\":\"%4\",\"%5\":\"%6\",\"%7\":\"%8\"").arg("token").arg(m_token).
  191. arg("user").arg(m_userName).arg("md5").arg(md5).arg("filename").arg(fileName);
  192. params.insert("cmd", "share");
  193. // QNetworkReply* reply = Post(QUrl(urlStr), headers, params, bodyStr.toUtf8());
  194. // QObject::connect(reply, &QNetworkReply::finished, [this, reply]{
  195. // QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());
  196. // QJsonObject jsonObj = jsonDoc.object();
  197. // int code = jsonObj["code"].toInt();
  198. // if (code == 0) {
  199. // emit signal_shareSuc();
  200. // }
  201. // reply->deleteLater();
  202. // });
  203. }
  204. void TCHttpService::setConfiguration(QString userName, QString firstPwd, QString domain)
  205. {
  206. qDebug() << "setConfiguration";
  207. this->m_domain = domain;
  208. this->m_userName = userName;
  209. this->m_firstPwd = firstPwd;
  210. connect(this, &TCHttpService::requestFinished, [](QNetworkReply* reply){
  211. qDebug() << "readall";
  212. qDebug() <<reply->readAll();
  213. reply->deleteLater();
  214. });
  215. apiLogin();
  216. }
  217. void TCHttpService::setSsl(bool enable)
  218. {
  219. qDebug() << "setSsl:" <<enable;
  220. this->m_enableSsl = enable;
  221. }
  222. QNetworkReply *TCHttpService::Get(const QUrl &url, const QMap<QString, QString> headers, const QMap<QString, QString> params)
  223. {
  224. QUrlQuery query;
  225. for (auto ite = params.constBegin(); ite != params.constEnd(); ite++) {
  226. query.addQueryItem(ite.key(), ite.value());
  227. }
  228. QUrl requestUrl = url;
  229. requestUrl.setQuery(query);
  230. QNetworkRequest request(requestUrl);
  231. for (auto ite = headers.constBegin(); ite != headers.constEnd(); ite++) {
  232. request.setRawHeader(ite.key().toUtf8(), ite.value().toUtf8());
  233. }
  234. QNetworkReply* reply = m_manager.get(request);
  235. return reply;
  236. }
  237. QNetworkReply *TCHttpService::Post(const QUrl &url, const QMap<QString, QString> headers, const QMap<QString, QString> params, const QByteArray body)
  238. {
  239. }
  240. QByteArray TCHttpService::Post(QUrl url, QMap<QString, QString> headers, QMap<QString, QString> params, QByteArray body, int i)
  241. {
  242. QUrlQuery query;
  243. for (auto ite = params.constBegin(); ite != params.constEnd(); ite++) {
  244. query.addQueryItem(ite.key(), ite.value());
  245. }
  246. QUrl requestUrl = url;
  247. requestUrl.setQuery(query);
  248. qDebug() << requestUrl;
  249. QNetworkRequest request(url);
  250. // for (auto ite = headers.constBegin(); ite != headers.constEnd(); ite++) {
  251. // request.setRawHeader(ite.key().toUtf8(), ite.value().toUtf8());
  252. // }
  253. qDebug() << 1;
  254. QJsonObject jsonObj;
  255. jsonObj["user"]="test1";
  256. jsonObj["pwd"]="e10adc3949ba59abbe56e057f20f883e";
  257. QJsonDocument jsonDoc(jsonObj);
  258. QByteArray jsonData = jsonDoc.toJson();
  259. qDebug() << 2;
  260. QNetworkReply* reply = nullptr;
  261. qDebug() << 3;
  262. reply = m_manager.post(request, jsonData);
  263. qDebug() << 4;
  264. QObject::connect(reply, &QNetworkReply::finished, [this, reply](){
  265. // QByteArray respData = reply->readAll();
  266. // qDebug() <<respData;
  267. // return respData;
  268. // reply->deleteLater();
  269. qDebug() << "emit requestFinished";
  270. // emit requestFinished(reply);
  271. });
  272. }
  273. void TCHttpService::updateFileMap(QJsonObject jsonObj)
  274. {
  275. QString fileMD5 = jsonObj["md5"].toString();
  276. QString fileUrl = jsonObj["http"].toString();
  277. QMap<QString, QString>::iterator ite = m_fileMap.begin();
  278. if (ite != m_fileMap.end())
  279. return;
  280. m_fileMap.insert(fileMD5, fileUrl);
  281. }
  282. TCHttpService::TCHttpService(QObject *parent) : QObject(parent)
  283. {
  284. }