From 923b017b4cafdd403b4dede621edfc8da925ec00 Mon Sep 17 00:00:00 2001 From: jiubingdao <2135482699@qq.com> Date: 星期三, 30 七月 2025 09:16:47 +0800 Subject: [PATCH] Merge branch 'master' of ssh://115.28.86.8:29418/~admin/天开景运_0405_250719 --- Server/付林涛/code/tianKai/addfile.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 87 insertions(+), 3 deletions(-) diff --git "a/Server/\344\273\230\346\236\227\346\266\233/code/tianKai/addfile.cpp" "b/Server/\344\273\230\346\236\227\346\266\233/code/tianKai/addfile.cpp" index 0601789..3c6e5c0 100644 --- "a/Server/\344\273\230\346\236\227\346\266\233/code/tianKai/addfile.cpp" +++ "b/Server/\344\273\230\346\236\227\346\266\233/code/tianKai/addfile.cpp" @@ -4,7 +4,7 @@ #include <QDebug> #include <QDateTime> #include <QString> - +#include <memory> #define DEFAULT_PATH ("E:\soft") #define DEFAULT_TYPE (tr("Pkg Files (*.zip *.tar.gz *.rar *.7z *.bz2)")) #define UPLOAD 10 @@ -52,8 +52,92 @@ + createDate.toString() + "#" + description; qDebug()<<versionMessage; - - emit addFileSignal(file, versionMessage); + // 鑾峰彇鏂囦欢鍩烘湰淇℃伅 + QString fileName = fileInfo.fileName(); + qint64 size = fileInfo.size(); + + // 璁$畻澶存秷鎭暱搴︼紝骞跺垎閰嶇┖闂� + // 澶存秷鎭紙绀轰緥锛� + int len = sizeof(UpLoadPkgHead) + fileName.size() + 1; + + std::shared_ptr<char> head(new char[len],[](char *p){delete[] p;}); + UpLoadPkgHead* pHead = reinterpret_cast<UpLoadPkgHead*>(head.get()); + + // 鐩存帴鎿嶄綔鏅鸿兘鎸囬拡绠$悊鐨勫唴瀛� + pHead->head.type = UPLOAD_REQ; + pHead->head.len = len; + memcpy(pHead->fileName, fileName.toUtf8().constData(), fileName.size()); + pHead->fileName[fileName.size()] = '\0'; + + emit addFileSignal(head, len); // 鐩存帴浼犻�掓櫤鑳芥寚閽� + + + QFile *pFile = new QFile(file); + if(!pFile){ + return; + } + + // 璇绘枃浠跺唴瀹� + + if (!pFile->open(QIODevice::ReadOnly)) { + qDebug() << "Failed to open file for reading:" << pFile->errorString(); + return; + } +// const int bufferSize = 4 * 1024; + const int bufferSize = 8 * 1024; + auto buffer = std::unique_ptr<char>(new char[bufferSize]); + qint64 totalBytesRead = 0; + int flag = 0; + while (!pFile->atEnd()) { + qint64 bytesRead = pFile->read(buffer.get(), bufferSize); + if (bytesRead == -1) { + qDebug() << "Error during read operation:" << pFile->errorString(); + break; + } + totalBytesRead += bytesRead; + + // 鏁版嵁鍖呮瀯閫狅紙绀轰緥锛� + int dtlen = sizeof(UpLoadPkgData) + fileName.size() + bytesRead + 2; + std::shared_ptr<char> dataPkg(new char[dtlen],[](char *p){delete[] p;}); + UpLoadPkgData* pData = reinterpret_cast<UpLoadPkgData*>(dataPkg.get()); + + // 濉厖鏁版嵁 + pData->head.len = len; + pData->head.type = UPLOAD_REQ; + pData->upLoadType = DATA_UPLOAD_REQ; + pData->fileNameLen = fileName.size(); + pData->dataLen = bytesRead; + pData->flag = ++flag; + pData->dataLen = bytesRead; + memcpy(pData->data, fileName.toUtf8().constData(), fileName.size()); + memcpy(pData->data + fileName.size() + 1, buffer.get(), bytesRead); + + emit addFileSignal(dataPkg, dtlen); + // 鏃犻渶鎵嬪姩 free锛宻hared_ptr 鑷姩閲婃斁 + + } + if(totalBytesRead != size){ + qDebug()<<"鏁版嵁鍙戦�佷笉瀹屾暣"; + return; + } + qDebug()<<"鏁版嵁鍙戦�佸畬鎴愶紝鍙戦�佹暟鎹簱鍖�"; + + int finLen = sizeof(UpLoadPkgFin)+fileName.size()+versionMessage.size()+2; + std::shared_ptr<char> finPkg(new char[finLen],[](char *p){delete[] p;}); + UpLoadPkgFin* pData = reinterpret_cast<UpLoadPkgFin*>(finPkg.get()); + + // 濉厖鏁版嵁 + pData->head.len = finLen; + pData->head.type = UPLOAD_REQ; + pData->fileNameLen = fileName.size(); + pData->cnt = flag; + memcpy(pData->fileName, fileName.toUtf8().constData(), fileName.size()); + memcpy(pData->fileName + fileName.size() + 1,versionMessage.data(),versionMessage.size()); + + emit addFileSignal(finPkg ,finLen); + emit addFileMsg(QString("涓婁紶鎴愬姛锛�")); + + delete pFile; } -- Gitblit v1.8.0