From d109987c6f39c78fe1d1e5ea1219bd4a51941261 Mon Sep 17 00:00:00 2001
From: lanyi <958600362@qq.com>
Date: 星期四, 31 七月 2025 17:28:02 +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