tchttpservice.cpp 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  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"]=m_userName;
  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. QNetworkRequest request(url);
  29. for (auto ite = headers.constBegin(); ite != headers.constEnd(); ite++){
  30. request.setRawHeader(ite.key().toUtf8(), ite.value().toUtf8());
  31. }
  32. reply = m_manager.post(request, jsonData);
  33. QObject::connect(reply, &QNetworkReply::finished, [this, reply]() {
  34. emit requestFinished(reply, "login");
  35. });
  36. }
  37. void TCHttpService::apiMyfileCount()
  38. {
  39. QString urlStr;
  40. if (m_enableSsl)
  41. urlStr = "https://" + m_domain + "/api/myfiles";
  42. else
  43. urlStr = "http://" + m_domain + "/api/myfiles";
  44. QMap<QString, QString> headers;
  45. headers.insert("Content-Type", "application/json");
  46. QMap<QString, QString> params;
  47. params.insert("cmd", "count");
  48. QUrl url = encodeUrl(urlStr, params);
  49. QJsonObject jsonObj;
  50. jsonObj["token"] = m_token;
  51. jsonObj["user"] = m_userName;
  52. QJsonDocument jsonDoc(jsonObj);
  53. QByteArray jsonData = jsonDoc.toJson();
  54. QNetworkRequest request(url);
  55. for (auto ite = headers.constBegin(); ite != headers.constEnd(); ite++){
  56. request.setRawHeader(ite.key().toUtf8(), ite.value().toUtf8());
  57. }
  58. QNetworkReply* reply = nullptr;
  59. reply = m_manager.post(request, jsonData);
  60. QObject::connect(reply, &QNetworkReply::finished, [this, reply](){
  61. emit requestFinished(reply, "myfilecount");
  62. });
  63. }
  64. void TCHttpService::apiMyfileNormal()
  65. {
  66. QString urlStr;
  67. if (m_enableSsl)
  68. urlStr = "https://" + m_domain + "/api/myfiles";
  69. else
  70. urlStr = "http://" + m_domain + "/api/myfiles";
  71. QMap<QString, QString> headers;
  72. headers.insert("Content-Type", "application/json");
  73. QMap<QString, QString> params;
  74. params.insert("cmd", "normal");
  75. QUrl url = encodeUrl(urlStr, params);
  76. QNetworkRequest request(url);
  77. for (auto ite = headers.constBegin(); ite != headers.constEnd(); ite++){
  78. request.setRawHeader(ite.key().toUtf8(), ite.value().toUtf8());
  79. }
  80. QJsonObject jsonObj;
  81. jsonObj["token"] = m_token;
  82. jsonObj["user"] = m_userName;
  83. jsonObj["count"] = m_total;
  84. jsonObj["start"] = 0;
  85. QJsonDocument jsonDoc(jsonObj);
  86. QByteArray jsonData = jsonDoc.toJson();
  87. QNetworkReply* reply = nullptr;
  88. reply = m_manager.post(request, jsonData);
  89. QObject::connect(reply, &QNetworkReply::finished, [this, reply](){
  90. emit requestFinished(reply, "myfilenormal");
  91. });
  92. }
  93. void TCHttpService::apiMd5(const QString& filePath)
  94. {
  95. QFile file(filePath);
  96. if (!file.open(QIODevice::ReadOnly)) {
  97. return;
  98. }
  99. QByteArray fileMd5;
  100. QCryptographicHash hash(QCryptographicHash::Md5);
  101. if (hash.addData(&file)) {
  102. fileMd5 = hash.result().toHex();
  103. }
  104. else
  105. return;
  106. QString urlStr;
  107. if (m_enableSsl)
  108. urlStr = "https://" + m_domain + "/api/md5";
  109. else
  110. urlStr = "http://" + m_domain + "/api/md5";
  111. QMap<QString, QString> headers;
  112. headers.insert("Content-Type", "application/json");
  113. QString md5Str = QString::fromUtf8(fileMd5);
  114. QString bodyStr = QString("\"%1\":\"%2\",\"%3\":\"%4\",\"%5\":\"%6\",\"%7\":\"%8\"").arg("token").arg(m_token).
  115. arg("md5").arg(md5Str).arg("filename").arg(QFileInfo(file).fileName()).arg("user").arg(m_userName);
  116. file.close();
  117. }
  118. void TCHttpService::apiUpload(const QString &filePath, const QString &md5Str)
  119. {
  120. QString urlStr;
  121. if (m_enableSsl)
  122. urlStr = "https://" + m_domain + "/api/upload";
  123. else
  124. urlStr = "http://" + m_domain + "/api/upload";
  125. QFile file(filePath);
  126. QFileInfo info(file);
  127. QHttpMultiPart* multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
  128. QHttpPart filePart;
  129. QString contentTypeStrFile = QString("form-data; name=\"file\"; filename=\"%1\"").arg(info.fileName());
  130. filePart.setHeader(QNetworkRequest::ContentDispositionHeader,
  131. QVariant(contentTypeStrFile));
  132. filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/octet-stream"));
  133. if (!file.open(QIODevice::ReadOnly)) {
  134. return;
  135. }
  136. filePart.setBodyDevice(&file);
  137. file.setParent(multiPart);
  138. multiPart->append(filePart);
  139. QHttpPart userPart;
  140. QString contentTypeStrUser = QString("form-data; name=\"user\"");
  141. userPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(contentTypeStrUser));
  142. userPart.setBody(m_userName.toUtf8());
  143. multiPart->append(userPart);
  144. QHttpPart md5Part;
  145. QString contentTypeStrMd5 = QString("form-data; name=\"md5\"");
  146. md5Part.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(contentTypeStrMd5));
  147. md5Part.setBody(md5Str.toUtf8());
  148. multiPart->append(md5Part);
  149. QHttpPart sizePart;
  150. QString contentTypeStrSize = QString("form-data; name=\"size\"");
  151. sizePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(contentTypeStrSize));
  152. sizePart.setBody(QString::number(info.size()).toUtf8());
  153. multiPart->append(sizePart);
  154. QUrl url(urlStr);
  155. QNetworkRequest request(url);
  156. QNetworkReply* reply = m_manager.post(request, multiPart);
  157. multiPart->setParent(reply);
  158. QObject::connect(reply, &QNetworkReply::finished, [this, reply]{
  159. QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());
  160. QJsonObject jsonObj = jsonDoc.object();
  161. int code = jsonObj["code"].toInt();
  162. if (code == 0) {
  163. emit signal_uploadSuc();
  164. }
  165. reply->deleteLater();
  166. });
  167. }
  168. void TCHttpService::apiSharePicShare(const QString &fileName, const QString &md5)
  169. {
  170. QString urlStr;
  171. if (m_enableSsl)
  172. urlStr = "https://" + m_domain + "/api/sharepic";
  173. else
  174. urlStr = "http://" + m_domain + "/api/sharepic";
  175. QMap<QString, QString> headers;
  176. QMap<QString, QString> body;
  177. QMap<QString, QString> params;
  178. headers.insert("Content-Type", "application/json");
  179. QString bodyStr = QString("\"%1\":\"%2\",\"%3\":\"%4\",\"%5\":\"%6\",\"%7\":\"%8\"").arg("token").arg(m_token).
  180. arg("user").arg(m_userName).arg("md5").arg(md5).arg("filename").arg(fileName);
  181. params.insert("cmd", "share");
  182. }
  183. void TCHttpService::setConfiguration(QString userName, QString firstPwd, QString domain)
  184. {
  185. qDebug() << "setConfiguration";
  186. this->m_domain = domain;
  187. this->m_userName = userName;
  188. this->m_firstPwd = firstPwd;
  189. connect(this, &TCHttpService::requestFinished, [this](QNetworkReply* reply, QString api){
  190. QByteArray rawData = reply->readAll();
  191. if (api == "login") {
  192. QJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);
  193. if (jsonDoc.isEmpty())
  194. return;
  195. QJsonObject jsonObj = jsonDoc.object();
  196. int code = jsonObj["code"].toInt();
  197. if (code == 0) {
  198. this->m_token = jsonObj["token"].toString();
  199. qDebug() << this->m_token;
  200. }
  201. }
  202. if (api == "myfilecount") {
  203. QJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);
  204. if (jsonDoc.isEmpty())
  205. return;
  206. QJsonObject jsonObj = jsonDoc.object();
  207. int code = jsonObj["code"].toInt();
  208. if (code == 0) {
  209. int total = jsonObj["total"].toInt();
  210. this->m_total = total;
  211. }
  212. }
  213. if (api == "myfilenormal") {
  214. }
  215. reply->deleteLater();
  216. });
  217. apiLogin();
  218. }
  219. void TCHttpService::setSsl(bool enable)
  220. {
  221. qDebug() << "setSsl:" <<enable;
  222. this->m_enableSsl = enable;
  223. }
  224. QUrl TCHttpService::encodeUrl(QString urlStr, QMap<QString, QString> params)
  225. {
  226. QUrlQuery query;
  227. for(auto ite = params.constBegin(); ite != params.constEnd(); ite++){
  228. query.addQueryItem(ite.key(), ite.value());
  229. }
  230. QUrl url(urlStr);
  231. url.setQuery(query);
  232. return url;
  233. }
  234. void TCHttpService::updateFileMap(QJsonObject jsonObj)
  235. {
  236. QString fileMD5 = jsonObj["md5"].toString();
  237. QString fileUrl = jsonObj["http"].toString();
  238. QMap<QString, QString>::iterator ite = m_fileMap.begin();
  239. if (ite != m_fileMap.end())
  240. return;
  241. m_fileMap.insert(fileMD5, fileUrl);
  242. }
  243. TCHttpService::TCHttpService(QObject *parent) : QObject(parent)
  244. {
  245. }